[英]Pandas group by consecutive numbers
我正在處理這樣的 DataFrame:
n_days probability
0 0.01
17 0.1
18 0.11
19 0.12
40 0.2
41 0.21
我想對連續數字進行分組並獲得每組的平均概率,如下所示:
n_days mean_probability
0 0.01
17-19 0.11
40-41 0.205
n_days
上的格式不太相關。
我試過類似的東西:
df['diff_days'] = df.n_days - df.n_days.shift()
接着:
df.diff_days.eq(1)
這帶來了這個 boolean:
n_days probability bool_eq
0 0.01 False
17 0.1 False
18 0.11 True
19 0.12 True
40 0.2 False
41 0.21 True
這似乎是一個進步,但我不知道如何跟進。 每個False
將是每個組的開始,但我將如何抓住整個組? 任何幫助,將不勝感激。 謝謝。
您可以使用pd.cut
+ DataFrame.groupby
:
mean_probability=df.groupby(pd.cut(df.n_days,len(df)//2)).probability.mean()
n_days
(-0.041, 13.667] 0.010
(13.667, 27.333] 0.110
(27.333, 41.0] 0.205
Name: probability, dtype: float64
您可以對pd.cut
箱進行分組。 請注意,每個 bin 從但不包括第一個值到最后一個值,例如 (16-19] 等價於 [17-19],其中列由整數組成。
bins = [-1, 0, 16, 19, 39, 41]
>>> df.groupby(
pd.cut(df['n_days'], bins))['probability'].mean().dropna()
n_days
(-1, 0] 0.010
(16, 19] 0.110
(39, 41] 0.205
Name: probability, dtype: float64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.