【问题标题】:pandas aggregate function in groupby - default option?groupby 中的 pandas 聚合函数 - 默认选项?
【发布时间】:2018-12-16 16:36:48
【问题描述】:

我有以下数据集 (df)。我想groupby 它使用品牌作为我的索引,获取工人和价值列的平均值以及提供者列的第一个计数。

brand   workers value   provider
H&M      322    56         mark
H&M      450    433        mark
Lindex  678     233        luke
Lindex  543     456        luke
Levi    234     32         chris
Levi    789     12         chris

现在可以

df = df.groupby('brand')['workers', 'value', 'provider'].agg({'workers': mean,  'value':mean, 'provider' : first).reset_index()

但是考虑到我的真实数据集是更多列,我想取平均值并且我不想指定它们中的每一个,是否有更好的方法来声明默认函数?

类似于“取所有非字符串列的平均值和字符串列的第一个观察值?”

【问题讨论】:

    标签: python pandas dataframe group-by pandas-groupby


    【解决方案1】:

    不,但编写一些代码来为你做这件事并不难。

    f = dict.fromkeys(df, 'mean')
    f.update(
        dict.fromkeys(df.columns[df.dtypes.eq(object)], 'first'))
    

    print(f)
    {'brand': 'first', 'provider': 'first', 'value': 'mean', 'workers': 'mean'}
    

    然后您将f 传递给agg

    df = df.groupby('brand')['workers', 'value', 'provider'].agg(f)
    

    如果要重置索引,则必须从 f 中删除 grouper。

    del f['brand']
    df = df.groupby('brand', as_index=False)['workers', 'value', 'provider'].agg(f)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 2020-03-07
      • 2023-01-12
      • 2014-11-23
      • 1970-01-01
      • 2017-06-07
      • 2022-01-21
      相关资源
      最近更新 更多