Groupby,并将不同的功能应用于第一列和最后一个列

问题描述 投票:1回答:1

我正在尝试对列进行分组,然后对每个列应用不同的功能。我引用了to the answer here,我的代码如下所示

def f(x):
    d = {}
    d['a'] = x['a'].max()
    d['b'] = x['b'].first()
    d['c'] = x['c'].last()
    return pd.Series(d, index=['a', 'b', 'c'])

require_data = required_data.groupby(['S','id', 'lane', 'timestamp','E']).apply(f)

并且由于第一个功能,我收到以下错误

TypeError: first() missing 1 required positional argument: 'offset'

但是我可以以罚款的方式运行groupby

require_data = required_data.groupby(['S','id', 'lane', 'timestamp','E']).first()

错误原因是什么

python pandas
1个回答
3
投票

这里最好使用GroupBy.agg,可以使用聚合方法GroupBy.agg来传递列名和GroupBy.first

GroupBy.first

如果要使用自己的自定义功能,则需要按位置选择GroupBy.last或搭配GroupBy.last,但就像提到的@Erfan一样,谢谢:

出于效率的考虑,强烈建议您不要使用自定义功能。

require_data = (required_data.groupby(['S','id', 'lane', 'timestamp','E'])
                             .agg({'a':'max', 'b':'first', 'c':'last'}))
© www.soinside.com 2019 - 2024. All rights reserved.