熊猫按连续数字分组

我正在处理这样的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)

这带来了这个布尔值:

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

chen362015 回答:熊猫按连续数字分组

您可以使用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个垃圾箱进行分组。注意,每个仓是从但不包括第一个值到并包括最后一个值,例如(16-19]等同于[17-19],其中该列由整数组成。

bins = [-1,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
本文链接:https://www.f2er.com/3164181.html

大家都在问