我创建了这个示例数据
pd.DataFrame.from_items([(0,['a1', 'a1', 'a2', 'a2']), (1,['b1', 'b1', 'b2', 'b2']), (2,['m', 'n', 'o', 'p'])])
0 1 2
0 a1 b1 m
1 a1 b1 n
2 a2 b2 o
3 a2 b2 p
我想“减少”此数据帧,使其具有列“0”中唯一值的索引,然后作为列返回列“2”中的值的数组。 例如
'2'
Index
a1 [m,n]
a2 [o,p]
我需要将其作为结果数据框,因为我想将生成的数据框连接到另一个数据框上。它们都“相当”大(18mio 行)。 我尝试使用堆栈,但不知道该怎么做。我尝试使用数据透视表,但 col '2' 中的值位于标题中,而不是用作值。任何帮助将不胜感激!
最佳答案
您可以使用groupby
并应用
,最后转换为系列
to_frame
:
print (df.groupby(0)[2].apply(list))
0
a1 [m, n]
a2 [o, p]
Name: 2, dtype: object
print (df.groupby(0)[2].apply(list).to_frame())
2
0
a1 [m, n]
a2 [o, p]
另一个解决方案:
print (df.groupby(0)[2].apply(lambda x: x.tolist()).to_frame())
2
0
a1 [m, n]
a2 [o, p]
<小时/>
如果需要输出为unique
值:
df = pd.DataFrame.from_items([(0,['a1', 'a1', 'a1', 'a2']),
(1,['b1', 'b1', 'b2', 'b2']),
(2,['m', 'n', 'm', 'p'])])
print (df)
0 1 2
0 a1 b1 m
1 a1 b1 n
2 a1 b2 m
3 a2 b2 p
print (df.groupby(0)[2].apply(list).to_frame())
2
0
a1 [m, n, m]
a2 [p]
print (df.groupby(0)[2].unique().to_frame())
2
0
a1 [m, n]
a2 [p]
关于python - 将数据框 reshape 为多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43052283/