慕尼黑的夜晚无繁华
这应该可以做到:df = pd.DataFrame( {'Weight': [1, 1, 0.75, 0.5, 0.25, 0.5, 1, 1, 1, 1]})weight_sum = df.Weight.sum()df['bin'] = 1df.loc[df.Weight.cumsum() > weight_sum / 2, 'bin'] = 2print(df)输出: Weight bin0 1.00 11 1.00 12 0.75 13 0.50 14 0.25 15 0.50 16 1.00 27 1.00 28 1.00 29 1.00 2
拉风的咖菲猫
pd.cut您可以在cumsum列的上使用Weights。df = pd.DataFrame({'Weight' : [1, 1, 0.75, 0.5, 0.25, 0.5, 1, 1, 1, 1]})s = df['Weight'].sum()pd.cut(df['Weight'].cumsum(), [-1, s/2, s], labels=[1,2])为此s = 8 ,默认创建组(-1, 4]和(4, 8]。(这是数学符号 - 精确的值4将包含在第一组中)您可以选择不同的方式,并通过指定和调整边界将值精确地4放入第二组中,这将为您提供组和right = False[0, 4)[4, 9)pd.cut(df['Weight'].cumsum(), [0, s/2, s+1], labels=[1,2], right=False)和用来指定精确或分别-1的值仍应位于该组中。s+108