Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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
Python 当列表中包含自定义函数时,在函数列表中使用df.agg(…)将失败_Python_Pandas - Fatal编程技术网

Python 当列表中包含自定义函数时,在函数列表中使用df.agg(…)将失败

Python 当列表中包含自定义函数时,在函数列表中使用df.agg(…)将失败,python,pandas,Python,Pandas,我希望聚合一组列,每个列有两个函数:np.mean和quart\u 1。所有列都是数字np.mean从numpy导入,quart_1是一个自定义函数,返回列的第一个四分位数: def quart_1(x): return np.percentile(x, 25) 问题是如果我做了df.agg([np.mean,quart_1]),我会得到KeyError:no results 错误似乎是quart_1如果我将原始数据帧包括在列表中,则返回原始数据帧而不进行任何聚合(带有一些标签),但如

我希望聚合一组列,每个列有两个函数:
np.mean
quart\u 1
。所有列都是数字
np.mean
numpy
导入,
quart_1
是一个自定义函数,返回列的第一个四分位数:

def quart_1(x):
    return np.percentile(x, 25)
问题是如果我做了
df.agg([np.mean,quart_1])
,我会得到
KeyError:no results

错误似乎是
quart_1
如果我将原始数据帧包括在列表中,则返回原始数据帧而不进行任何聚合(带有一些标签),但如果我在没有列表的情况下为其提供原始函数,则实际执行聚合并返回熊猫系列(请参见下面的命令和输出)

将其作为标量馈送
quart_1

df.select_dtypes([np.number]).agg(quart_1)

accelerometer_x     0.445186
accelerometer_y    10.619320
dtype: float64
…并且在列表中:

df.select_dtypes([np.number]).agg([quart_1])

                            accelerometer_x accelerometer_y
                                quart_1         quart_1
gps_time                                               
2017-07-27 18:35:14.660        0.519700       10.703300
2017-07-27 18:35:14.665        0.474200       10.684200
2017-07-27 18:35:14.670        0.474200       10.684200
2017-07-27 18:35:14.675        0.574800       10.633900
2017-07-27 18:35:14.680        0.574800       10.633900
2017-07-27 18:35:14.685        0.528103       10.657099
2017-07-27 18:35:14.690        0.476600       10.681800
2017-07-27 18:35:14.695        0.446749       10.694255
2017-07-27 18:35:14.700        0.476600       10.681800
2017-07-27 18:35:14.705        0.574800       10.643500
2017-07-27 18:35:14.710        0.574800       10.643500

结果表明,由于某种原因,当在列表中传递时,输入向量的维度会发生变化。在
quart_1
中用
x.T
替换
x
成功了。我这里没有提到额外的百分位数,似乎使用
quartu_1
quartu_3
(与
quartu_1
相同,但25替换为75)导致了某种名称冲突。我通过使用前面提到的
百分位数
函数修复了它

结果表明,由于某种原因,当在列表中传递时,输入向量的维度会发生变化。在
quart_1
中用
x.T
替换
x
成功了。我这里没有提到额外的百分位数,似乎使用
quartu_1
quartu_3
(与
quartu_1
相同,但25替换为75)导致了某种名称冲突。我通过使用前面提到的
percentile
函数来修复它

DataFrame.agg相对较新,所以我猜这是一个bug。早些时候,我们在没有df.agg的时候使用了这个黑客:
df.groupby(np.ones(len(df))).agg([np.mean,quart_1])
DataFrame.agg相对较新,所以我猜这是一个bug。早些时候,我们在没有df.agg的时候使用了这种方法:
df.groupby(np.ones(len(df))).agg([np.mean,quart_1])