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
添加回答
舉報