我有一个Pandas数据框如下:
a b c d
0 Apple 3 5 7
1 Banana 4 4 8
2 Cherry 7 1 3
3 Apple 3 4 7
我想按列“a”对行进行分组,同时用分组行中的平均值替换列“c”中的值,并添加另一列,该列的平均值已计算为列“c”中的值的标准差。列“b”或“d”中的值对于分组的所有行都是常数。因此,所需的输出将是:
a b c d e
0 Apple 3 4.5 7 0.707107
1 Banana 4 4 8 0
2 Cherry 7 1 3 0
实现这一目标的最佳途径是什么?
2条答案
按热度按时间p8h8hvxi1#
您可以使用
groupby-agg
操作:然后重命名并重新排序列:
默认情况下,Pandas计算样本标准差。要计算总体标准差:
收益率
lokaqttq2#
如果某些列中的值对于分组的所有行都是常量(例如OP中的“b”、“d”),则可以将其包含到分组器中,并在以后重新排序列。
您还可以使用命名聚合使groupby结果具有自定义列名。
mean
列命名为'c'
,std
列命名为groupby.agg
末尾的'e'
。您也可以将参数传递给
groupby.agg
。例如,如果您需要在groupby.agg
中将ddof=0
传递给std()
,则可以使用lambda来完成此操作。