根据N的值创建行的存储桶列表

时间:2019-12-12 20:29:47

标签: python-3.x pandas

我有一个说11行的pandas数据框。我想根据N的值创建一个列列表,如下所示:

import numpy as np
import pandas as pd
import math
import sys

df = pd.DataFrame({'group':[1,1,1,2,2,2,2,3,3,4,5]})
df

例如:

如果N值设为2,那么我想创建2个如下所示的列表:

list = [[1,1,1,2,2,2,2], [3,3,4,5]]

,以便每个组都位于同一列表中。如果列表的长度不一样可以。

1 个答案:

答案 0 :(得分:1)

为确保获得N个分组,它们应尽可能均匀地划分,应使用pd.cut。我们使用rank来确保组被密集地标记,否则将无法正常工作。这样可以确保将组数平均分配给每个列表+/- 1,尽管不能确保列表的长度几乎相同。

N = 2
df.groupby(pd.cut(df.group.rank(method='dense'), N)).group.agg(list).tolist()
#[[1, 1, 1, 2, 2, 2, 2, 3, 3], [4, 5]]

N = 3
df.groupby(pd.cut(df.group.rank(method='dense'), N)).group.agg(list).tolist()
#[[1, 1, 1, 2, 2, 2, 2], [3, 3], [4, 5]]