我有一个包含100多个列的df,我想使用groupby并取其中包含“ WR”和“ sum”的列的平均值,如果不使用agg()的话。
df.groupby([c1,c2]).agg({ {i for i in df.columns if 'WR' in i}:'mean', {i for i in df.columns if 'WR'
not in i}:'sum'})
有可能吗?
答案 0 :(得分:1)
通过dict.fromkeys
和merge一起创建字典:
d1 = dict.fromkeys([i for i in df.columns if 'WR' in i], 'mean')
d2 = dict.fromkeys([i for i in df.columns if 'WR' not in i], 'sum')
df.groupby([c1,c2]).agg({**d1, **d2})
另一个类似的解决方案:
m = df.columns.str.contains('WR')
d1 = dict.fromkeys(df.columns[m], 'mean')
d2 = dict.fromkeys(df.columns[~m], 'sum')
df.groupby([c1,c2]).agg({**d1, **d2})
答案 1 :(得分:-1)
import pandas as pd
d1 = dict.fromkeys([如果WR in i,则i在df.columns中为i],“平均值”)
d2 = dict.fromkeys([如果WR不在i中,则i在df.columns中为i],'sum')
df.groupby([c1,c2]),agg({** d1,** d2})