Python 按连续数字分组

Python 按连续数字分组,python,pandas,group-by,Python,Pandas,Group By,我正在处理这样的数据帧: 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    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    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_天的格式设置不太相关

我试过这样的方法:

df['diff_days'] = df.n_days - df.n_days.shift()
然后:

df.diff_days.eq(1)
这带来了布尔值:

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
都是每个组的开始,但是我如何抓住整个组呢? 任何帮助都将不胜感激。谢谢。

您可以使用+:


你可以在垃圾箱上分组。请注意,每个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

经过这么长时间,我觉得我应该知道关于
pd.cut
。谢谢@Alexander,因为数据帧更大,我使用了
bins=df[df.bool\u eq==0].n\u days.tolist()
,然后是
bins=[-1,*bins]
,最后是
平均概率=df.groupby(pd.cut(df.n\u days,bins)).probability()