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
直到它被修復。
添加回答
舉報