我经常使用pandas的agg()
函数对数据框中的每一列运行汇总统计。例如,以下是生成平均值和标准差的方法:
df = pd.DataFrame({'A': ['group1', 'group1', 'group2', 'group2', 'group3', 'group3'],
'B': [10, 12, 10, 25, 10, 12],
'C': [100, 102, 100, 250, 100, 102]})
>>> df
[output]
A B C
0 group1 10 100
1 group1 12 102
2 group2 10 100
3 group2 25 250
4 group3 10 100
5 group3 12 102
在这两种情况下,单独的行发送到agg函数的顺序并不重要。但考虑以下示例:
df.groupby('A').agg([np.mean, lambda x: x.iloc[1] ])
[output]
mean <lambda> mean <lambda>
A
group1 11.0 12 101 102
group2 17.5 25 175 250
group3 11.0 12 101 102
在这种情况下,Lambda函数能够正常运行,输出每个组中的第二行。然而,在pandas文档中我没有发现任何暗示这在所有情况下都是正确的。我想使用agg()
和加权平均函数,因此我希望确保进入该函数的行与它们在原始数据帧中出现的顺序相同。有人知道吗,最好是通过文档或pandas源代码的某个地方,可以保证这是正确的吗?
B
列反映,则可以在 lambda 中对每个组按B
进行排序以确保顺序正确。 - Mariusagg()
调用之前,数据框已经排序,因此只有在groupby()
的一部分重新排序时才会出现问题。 - BringMyCakeBack