Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 熊猫数据帧自定义agg函数奇怪的行为_Pandas_Aggregation - Fatal编程技术网

Pandas 熊猫数据帧自定义agg函数奇怪的行为

Pandas 熊猫数据帧自定义agg函数奇怪的行为,pandas,aggregation,Pandas,Aggregation,我想使用一个自定义函数沿一个轴聚合一个数据帧,但我很难确定该函数应该返回什么 df = pd.DataFrame(np.arange(50).reshape(10,5)) 您可以将numpy函数传递给DataFrame.agg: # Case 1 df.agg([np.mean], axis=1) 您将得到您所期望的:一个数据帧,它的索引与df一样,但只有一列:“mean”。 但出于某种原因,以下行为完全不同: # Case 2 df.agg([lambda x:np.mean(x)], a

我想使用一个自定义函数沿一个轴聚合一个数据帧,但我很难确定该函数应该返回什么

df = pd.DataFrame(np.arange(50).reshape(10,5))
您可以将numpy函数传递给
DataFrame.agg

# Case 1
df.agg([np.mean], axis=1)
您将得到您所期望的:一个数据帧,它的索引与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)

为什么后两种情况的工作方式与第一种情况有所不同?

如果我没有弄错的话,
情况2中发生的事情是np.mean()操作首先将数组展平,因此将计算每个行条目的每列平均值,这就是为什么在运行
df.agg([lambda x:np.mean(x)],axis=1)时,您会得到数据帧中每个条目的平均值。
返回:

               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
类似地,通过在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
      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