2 回答
TA贡献1864条经验 获得超6个赞
这应该可以做到:
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'] = 1
df.loc[df.Weight.cumsum() > weight_sum / 2, 'bin'] = 2
print(df)
输出:
Weight bin
0 1.00 1
1 1.00 1
2 0.75 1
3 0.50 1
4 0.25 1
5 0.50 1
6 1.00 2
7 1.00 2
8 1.00 2
9 1.00 2
TA贡献1995条经验 获得超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
添加回答
举报