帶有兩列的pandas數據框(x):sum和value。總和是記錄的數量具有相同的值。例如:由裝載列切割的熊貓
sum value
2 3
4 1
意味着2條具有價值3和第4條記錄的值爲1 而我想要做的是:按值排序,然後切[1,1,1,1,3,3]分成3部分:[1,1],[1,1],[3,3]
如何將值分成3部分,每部分的記錄數是否相等?
pandas.cut不能採取和列考慮
帶有兩列的pandas數據框(x):sum和value。總和是記錄的數量具有相同的值。例如:由裝載列切割的熊貓
sum value
2 3
4 1
意味着2條具有價值3和第4條記錄的值爲1 而我想要做的是:按值排序,然後切[1,1,1,1,3,3]分成3部分:[1,1],[1,1],[3,3]
如何將值分成3部分,每部分的記錄數是否相等?
pandas.cut不能採取和列考慮
我認爲你可以使用cumsum
雙numpy.where
:
sumall = df['sum'].sum()
df = df.sort_values(by='value')
df['sum_sum'] = df['sum'].cumsum()
df['tag'] = np.where(df['sum_sum'] < sumall/3, 0,
np.where(df['sum_sum'] < 2 * sumall/3, 1, 2))
print (df)
sum value sum_sum tag
1 4 1 4 2
0 2 3 6 2
這對我的作品。但醜陋的:
sum = df['sum'].sum()
def func(x):
if x < sum/3:
return 0
elif x < 2 * sum/3:
return 1
return 2
df = df.sort_values(by='value')
df['sum_sum'] = np.cumsum(df['sum'].values)
df['tag'] = df['sum_sum'].apply(func)
所以實際上,你想分裂'[3,3,1,1,1,1,1,1,1,1,1,1]'三個?這樣做的規則究竟是什麼? –
@JonClements是的,我在我的問題中添加了規則 –
正確...那麼拆分的順序如何決定......爲什麼不是它[[3,3],[1,1],[1, 1]]或其他組合? –