我有一个DataFrame,其列类似于:
我想使用'pd.groupby'根据ID列对行进行分组。另外,我想使用'.agg()'将函数应用于每一列。
对于具有分数的列,我想应用“ np.average”。例如,对于“可靠性得分流A”列,权重在“流A”列中,对于在“流B”中的列“可靠性得分流B”,依此类推。另一方面,对于带有Flows的列,我只想使用sum。
因此,预期的输出将类似于:
你如何做到的?
谢谢
答案 0 :(得分:0)
创建字典以显示如何汇总每一列。
dd = {k:'mean' for k in df.filter(regex='^Flow.*').columns.tolist()}
for i in df.filter(like='Relia'):
dd[i] = 'sum'
dd
输出:
{'Flow A': 'mean',
'Flow B': 'mean',
'Flow C': 'mean',
'Flow D': 'mean',
'Flow E': 'mean',
'Reliabilty Score Flow A': 'sum',
'Reliabilty Score Flow B': 'sum',
'Reliabilty Score Flow C': 'sum',
'Reliabilty Score Flow D': 'sum',
'Reliabilty Score Flow E': 'sum'}
然后将groupby
与agg
和字典一起使用,dd:
df.groupby('ID').agg(dd).reindex(df.columns[1:], axis=1)