包含两列的pandas数据帧(x):sum和value。 sum是记录的数量具有相同的值。例如:
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不能考虑总和列
答案 0 :(得分:1)
我认为您可以将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
答案 1 :(得分:0)
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)