创建新的数据框,它总结了一些其他列的不同数值范围的出现次数

Create new dataframe which summarizes the number of occurences for different numeric ranges of some other column

我有数据框 df,如第一张照片所示。绿色行是列 Condition1 为 'Yes' 的行。黄色行是同时具有 Condition1Condition2 列的行,如 'Yes'.

问题: 请参阅 second photo,其中显示了所需的输出,这是一个新的数据帧,其中:

(1)。 'Count_Condition1' 列包含绿色行出现的次数。 'Count_Condition_1&2' 列包含黄色行出现的次数。

(2)。除了 (1),我想将列 'Vol' 拆分为不同的范围(见第二张照片)并相应地显示计数。

例如Condition1='Yes'的情况有3个,Vol的数据范围在0.2到0.2999之间

cut 用于合并列 Vol 和计数匹配 Yes 值创建辅助列,计数 Trues 的最后一个聚合布尔值:

bins=[-np.inf, 0.2, 0.3, 0.4, 0.5, np.inf]

labels = [ f'{a} to {round(b-0.0001, 4)}'.replace('-inf to ', '<=').replace(' to inf', '') 
          for a, b in zip(bins, bins[1:])]
labels[-1] = '>=' + labels[-1]

s1 = df['Condition1'].eq('Yes')
s2 = df['Condition2'].eq('Yes')
g = pd.cut(df['Vol'], bins = bins, right = False, labels = labels)


df1 = (df.assign(Count_Condition1 = s1, Count_Condition_1_2 = s1 & s2)
         .groupby(g)[['Count_Condition1','Count_Condition_1_2']]
         .sum())
print (df1)
               Count_Condition1  Count_Condition_1_2
Vol                                                 
<=0.1999                      2                    1
0.2 to 0.2999                 3                    1
0.3 to 0.3999                 1                    1
0.4 to 0.4999                 1                    0
>=0.5                         2                    2