python - 将数据框 reshape 为多索引

标签 python list python-3.x pandas group-by

我创建了这个示例数据

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/

相关文章:

python - 列表到元组组

python - 在给定时间/样本量下,频率 f1 和 f2 之间呈指数变化的正弦波

python - 使用 if 条件列表理解以获取特定类型的文件列表

c++ - 如何在 C++ 中简洁地初始化安全集合?

python-3.x - 使用 Conv1d 在 Python/Keras 中自动过滤时间序列

python-3.x - 如何创建元组的循环引用?

python - 是什么让 Python 成为一种优秀的脚本语言?

python - 红点坐标检测

python - 将目录文件中的特定列提取到新文件中

python - Python : How do I simplify this code? 优化