由装载栏

时间:2016-12-05 08:32:43

标签: pandas numpy

包含两列的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不能考虑总和列

2 个答案:

答案 0 :(得分:1)

我认为您可以将cumsumnumpy.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)