gpt4 book ai didi

Pandas DataFrame 自定义 agg 函数奇怪的行为

转载 作者:行者123 更新时间:2023-12-04 15:01:03 24 4
gpt4 key购买 nike

我想使用自定义函数沿轴聚合 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
同样,您可以制作 Case 3表现为 Case 1通过指定 axis=0 来做在 np.mean() 函数中:
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 函数奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66911819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com