如果我没记错的话,
Case 2
中发生的是np.mean()操作首先将数组展平,因此计算每行条目的每列均值,这就是当您运行
df.agg([lambda x: np.mean(x)], axis=1)
时返回DataFrame中每个单个条目的平均值的原因。
0 1 2 3 4
0 <lambda> 0.0 1.0 2.0 3.0 4.0
1 <lambda> 5.0 6.0 7.0 8.0 9.0
2 <lambda> 10.0 11.0 12.0 13.0 14.0
3 <lambda> 15.0 16.0 17.0 18.0 19.0
4 <lambda> 20.0 21.0 22.0 23.0 24.0
5 <lambda> 25.0 26.0 27.0 28.0 29.0
6 <lambda> 30.0 31.0 32.0 33.0 34.0
7 <lambda> 35.0 36.0 37.0 38.0 39.0
8 <lambda> 40.0 41.0 42.0 43.0 44.0
9 <lambda> 45.0 46.0 47.0 48.0 49.0
在 pandas 聚合函数文档 中,有一个关于numpy聚合函数与pandas聚合操作的特定点。
要使“情况2”表现得像“情况1”一样,可以在np.mean()函数本身中指定轴:df.agg([lambda x: np.mean(x, axis=0)],axis=1)
,其返回以下结果:
<lambda>
0 2.0
1 7.0
2 12.0
3 17.0
4 22.0
5 27.0
6 32.0
7 37.0
8 42.0
9 47.0
同样地,你可以通过在np.mean()函数中指定axis=0来使
Case 3
的表现像
Case 1
一样:
def f(x, **kwargs):
return np.mean(x, axis=0, **kwargs)
df.agg([f], axis=1)
这将返回:
f
0 2.0
1 7.0
2 12.0
3 17.0
4 22.0
5 27.0
6 32.0
7 37.0
8 42.0
9 47.0