我有一个数据框,需要对其进行分组,然后在每个组上应用多个函数。通常,我会使用
我了解到,当我有一个具有多个列作为输入的函数时,我需要使用
我会期望得到类似于
使用
groupby().agg()
(参见Apply multiple functions to multiple groupby columns),但我感兴趣的函数不需要一个列作为输入,而是需要多个列。我了解到,当我有一个具有多个列作为输入的函数时,我需要使用
apply
(参见Pandas DataFrame aggregate function using multiple columns)。但是,如果我有多个具有多个列作为输入的函数,我需要什么呢?import pandas as pd
df = pd.DataFrame({'x':[2, 3, -10, -10], 'y':[10, 13, 20, 30], 'id':['a', 'a', 'b', 'b']})
def mindist(data): #of course these functions are more complicated in reality
return min(data['y'] - data['x'])
def maxdist(data):
return max(data['y'] - data['x'])
我会期望得到类似于
df.groupby('id').apply([mindist, maxdist])
的语句。 min max
id
a 8 10
b 30 40
使用
pd.DataFrame({'mindist':df.groupby('id').apply(mindist),'maxdist':df.groupby('id').apply(maxdist)}
实现(如果我有一打要应用于分组数据框的函数,这显然不是很方便)。 最初我认为这位OP有同样的问题,但他似乎对aggregate
满意,这意味着他的函数只接受一个列作为输入。