【发布时间】:2019-12-19 05:13:24
【问题描述】:
我有一个数据框,它应该被分组,然后在每个组上应用几个函数。通常,我会使用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)} 实现 - 如果我有十几个函数要应用于分组数据帧,这显然不是很方便)。最初我以为this OP 有同样的问题,但他似乎对aggregate 没问题,这意味着他的函数只需要一列作为输入。
【问题讨论】:
标签: pandas function aggregate apply pandas-groupby