在DataFrame中对行进行分组

时间:2019-01-16 20:03:40

标签: python pandas numpy dataframe

我有一个DataFrame,其列类似于:

enter image description here

我想使用'pd.groupby'根据ID列对行进行分组。另外,我想使用'.agg()'将函数应用于每一列。

对于具有分数的列,我想应用“ np.average”。例如,对于“可靠性得分流A”列,权重在“流A”列中,对于在“流B”中的列“可靠性得分流B”,依此类推。另一方面,对于带有Flows的列,我只想使用sum。

因此,预期的输出将类似于:

enter image description here

你如何做到的?

谢谢

1 个答案:

答案 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'}

然后将groupbyagg和字典一起使用,dd:

df.groupby('ID').agg(dd).reindex(df.columns[1:], axis=1)