2 回答
TA贡献1824条经验 获得超5个赞
很有意思。至少在我的 Pandas (0.25.1) 版本中显然存在一个 bug df.groupby(...).quantile(<array-like>)。该代码路径是不同的,甚至在非常简单的例子中似乎也被打破了,比如:
df = pd.DataFrame(
{"A": [0., 0., 0.], "B": ["X", "Y", "Z"]}
)
result = df.groupby("B").quantile([0.5, 0.9])
虽然它适用于 2 元素版本:
df = pd.DataFrame(
{"A": [0., 0.], "B": ["X", "Y"]}
)
result = df.groupby("B").quantile([0.5, 0.9])
我会避免在类似数组的对象上使用 groupby 和分位数,直到代码被修复,即使在它现在可以工作的情况下也是如此,因为它很可能容易出错。
Blame 还显示了很多相当新鲜的更新(10 个月、16 个月)也正是处理这些代码片段。
TA贡献1824条经验 获得超6个赞
您在两个示例中都看不到分位数在起作用。只有零,每个组只有一个元素,所以结果总是零。还是我在这里错了?
我有 pandas 0.25.3 并获得有用的结果
import pandas as pd
df = pd.DataFrame(
{"A": [1., 2., 3., 4., 5., 6.], "B": ["X", "X", "Y", "Y", "Z", "Z"]}
)
result = df.groupby("B").quantile([0.5, 0.9])
print(result)
输出:
A
B
X 0.5 1.5
0.9 1.9
Y 0.5 3.5
0.9 3.9
Z 0.5 5.5
0.9 5.9
如果它适用于传递给你的单个数字,quantiles()你可以破解类似
q = [0.2, 0.5, 0.9]
res = [df.groupby("B").quantile(_).loc['X', 'A'] for _ in q]
df_q = pd.DataFrame({'A':res, 'quantiles':q})
print(df_q)
输出:
A quantiles
0 1.2 0.2
1 1.5 0.5
2 1.9 0.9
直到它被修复。
添加回答
举报