我有一个说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]]
,以便每个组都位于同一列表中。如果列表的长度不一样可以。
答案 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]]