首页 > 解决方案 > pandas GroupBy agg 计算(传递参数)

问题描述

我想使用 pandas GroupBy agg“计算/描述性统计”函数,而不是应用定义/自定义或 lambda 函数。我发现前一种方法(例如df.groupby(groupid).agg({'col1':'mean'}))比后来的方法(例如 )更快df.groupby(groupid).agg(name='col1',lambda x:np.nanmean(x))。但是,我很难根据需要在多个列上应用前一种方法。

假设我有这样的 pandas 数据框,我想采用(只是示例)

  1. 每个用户的交易数量
  2. 交易的第二个最后日期
  3. 平均交易额
df = pd.DataFrame({"user_id":["u123"] * 5, 
                   "order_date":["2021-01-01","2021-01-02","2021-01-03","2021-01-04","2021-01-04"], 
                   "item_price":[123,234,321,345,0]})

我可以在 groupby.agg 中使用 lambda 函数,例如,

df.groupby('user_id').agg(count=('user_id', lambda x: len(x)),
                          last2date=('order_date', lambda x: x.tail(2)[-1:]),
                          avgprice=('item_price', lambda x: np.nanmean(x))).reset_index()

但是,我不想使用 lambda 函数,而是想使用tailornth 函数,但不知道如何通过n.

df.groupby(['user_id'])['order_date'].tail(2)[-1:] ## this works but I want agg on other columns too
df.groupby(['user_id']).agg({'user_id':'size', 'order_date':'nth'}) ## this fails how to pass n?

标签: pandasaggregation

解决方案


推荐阅读