我是一名熊猫新手,我正在努力解决以下问题。
我有一个很大的DataFrame
(10000 x 28),如下所示。
Col1 Col2 Col3 Col4 Col5
A B C D E
我怎样才能将其重塑为如下所示?
Col1 Col2 NewColName
A B C
A B D
A B E
前两列保持不变,最后三列在其上“分布”。
我的目标是取一大片DataFrame
并将其变成“整洁的数据”
我尝试过concat,stack等方法,但我觉得我错过了解决这个问题的优雅方法。
答案 0 :(得分:1)
将['Col1, 'Col2]
设为index
并使用.stack()
。
df.set_index(['Col1', 'Col2']).stack()
Col1 Col2
A B 0 C
0 D
0 E
然后按照示例中的.reset_index()
进行格式设置(您也可以添加name='Col'
以获得@jezrael建议的相同结果:
df.reset_index(-1, drop=True).reset_index(name='Col')
Col1 Col2 0
0 A B C
1 A B D
2 A B E
答案 1 :(得分:1)
print pd.melt(df, id_vars=['Col1','Col2'],value_name='Col').drop('variable', axis=1)
Col1 Col2 Col
0 A B C
1 A B D
2 A B E
<强>计时强>:
df = pd.concat([df]*1000).reset_index(drop=True)
In [58]: %timeit pd.melt(df, id_vars=['Col1','Col2'],value_name='Col').drop('variable', axis=1)
100 loops, best of 3: 2.48 ms per loop
In [59]: %timeit df.set_index(['Col1', 'Col2']).stack().reset_index(-1, drop=True).reset_index(name='Col')
100 loops, best of 3: 3.83 ms per loop