Pandas dataframe 如何对数字列的 bins 进行分组,然后计算其他二进制列

Pandas dataframe how to groupby bins of numerical column and then count other binary column

我有一个数据

c1 c2  SED f
1  2   0.2 1
3  3   0.7 1
3  1   0.1 0
8  1   0.6 0
9  2   1   1
4  9   8.3 1

我想将 SED 分组到宽度为 0.5 的 bin 和 foreach bin,计算列 f 为 1 的行数和它为 0 的行数。

所以对于这个例子,我将得到:

SED_bin   cou_0   cou_1     
  0-0.5     1       1
  0.5-1     1       2
  8-8.5     0       1 

最好的方法是什么? 请注意,这只是 SED 值的一个示例,可能有更多低于此范围的值,因此我需要分箱是通用的

一种选择是使用 cut + crosstab:

out = (pd.crosstab(pd.cut(df['SED'], np.arange(int(df['SED'].min()), int(df['SED'].max())+1, 0.5)), df['f'])
       .add_prefix('count_').rename_axis(index='SED_bins').reset_index())

输出:

f    SED_bins  count_0  count_1
0  (0.0, 0.5]        1        1
1  (0.5, 1.0]        1        2
2  (8.0, 8.5]        0        1