大佬教程收集整理的这篇文章主要介绍了Pandas DataFrame 自定义 agg 函数奇怪的行为,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用自定义函数沿轴聚合 Pandas DataFrame,但无法确定该函数应返回的内容。
df = pd.DataFrame(np.arange(50).reshape(10,5))
您可以将 numpy 函数传递给 DataFrame.agg
:
# Case 1
df.agg([np.mean],axis=1)
你得到了你所期望的:一个 DataFrame 索引就像 df,但有一列:'mean'。 但出于某种原因,以下行为完全不同:
# Case 2
df.agg([lambda x:np.mean(X)],axis=1)
甚至
# Case 3
def f(x,**kwargs):
return np.mean(x,**kwargs)
df.agg([f],axis=1)
为什么后两种情况与第一种情况有什么不同?
如果我没记错的话,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
关于 numpy 聚合函数与 the pandas documentation on the aggregation function 中的 Pandas 聚合操作有何不同,有一个具体点。
要使 Case 2
的行为像 Case 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() 函数中指定 Case 3
使 Case 1
的行为与 axis=0
一样:
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
以上是大佬教程为你收集整理的Pandas DataFrame 自定义 agg 函数奇怪的行为全部内容,希望文章能够帮你解决Pandas DataFrame 自定义 agg 函数奇怪的行为所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。