簡體   English   中英

Pandas 按連續數字分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM