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])