我有以下代码和 Dataframe :
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [6, 7, 8, 9, 10]})
我想使用np.quantile计算列'A'的0.25百分位数和列'B'的0.75百分位数。我尝试以下代码:
(df.
agg({'A' : lambda x: np.quantile(a=x, q=0.25),
'B' : lambda x: np.quantile(a=x, q=0.75)}))
我得到以下结果:
A B
0 1.0 6.0
1 2.0 7.0
2 3.0 8.0
3 4.0 9.0
4 5.0 10.0
但我期待以下结果或类似的东西:
A 2.0
B 9.0
dtype: float64
问题是lambda函数计算的是序列中每个元素的分位数,而不是整个序列。
我的问题是,如果我想使用pandas中的agg函数和numpy中的分位数函数,如果我想使用lambda函数将不同的参数传递给一个函数,我如何获得预期的结果。
我已经读过Python Pandas: Passing Multiple Functions to agg() with Arguments和Specifying arguments to pandas aggregate function的文章,但它们只在数据分组时起作用,而在数据未分组时不起作用。
2条答案
按热度按时间xxhby3vn1#
您错过了
axis
参数:也可以使用
partial
函数:c9x0cxw02#
这在
Series.quantile
中很好用:使用
numpy.quantile
,你需要传递numpy数组,而不是Series:输出: