groupby中的pandas聚合函数-默认选项?

Fil*_*tio 5 python group-by dataframe pandas pandas-groupby

我有以下数据集 ( 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
Run Code Online (Sandbox Code Playgroud)

现在我能

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

但考虑到我的真实数据集作为更多列的方式,我想取平均值并且我不想指定每个列,有没有更好的方法来声明默认函数?

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

cs9*_*s95 9

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

f = dict.fromkeys(df, 'mean')
f.update(
    dict.fromkeys(df.columns[df.dtypes.eq(object)], 'first'))
Run Code Online (Sandbox Code Playgroud)

print(f)
{'brand': 'first', 'provider': 'first', 'value': 'mean', 'workers': 'mean'}
Run Code Online (Sandbox Code Playgroud)

然后你传递fagg.

df = df.groupby('brand')['workers', 'value', 'provider'].agg(f)
Run Code Online (Sandbox Code Playgroud)

如果要重置索引,则必须从f.

del f['brand']
df = df.groupby('brand', as_index=False)['workers', 'value', 'provider'].agg(f)
Run Code Online (Sandbox Code Playgroud)