如何将列传递给新数据框中的行?

时间:2017-01-04 18:59:42

标签: python pandas

我需要根据new创建一个新的数据框df

df = 
ID   GROUP_1   GROUP_2    GROUP_3   COUNT   NAME
1    AAA       AAA        CCC       5       xxx
2    BBB       CCC        AAA       6       yyy

结果应该是这个:

new =
ID   GROUP  COUNT  NAME
1    AAA    5      xxx
1    CCC    5      xxx
2    BBB    6      yyy
2    CCC    6      yyy
2    AAA    6      yyy

所以,我希望将GROUP_1GROUP_2GROUP_3的值放入行中(实际上我有更多以GROUP_开头的列,即&#39 ;为什么我更喜欢使用df.filter(regex = "^GROUP"))。

考虑到数据集非常大(约1Gb),我该怎么做?

1 个答案:

答案 0 :(得分:3)

方法1
使用pd.melt

cols = ['ID', 'GROUP', 'COUNT', 'NAME']
pd.melt(
    df, ['ID', 'COUNT', 'NAME'],
    ['GROUP_1', 'GROUP_2', 'GROUP_3'],
    value_name='GROUP')[cols]

方法2
set_index + stack

cols = ['ID', 'GROUP', 'COUNT', 'NAME']
df.set_index(['ID', 'COUNT', 'NAME']).stack().reset_index(name='GROUP')[cols]
   ID GROUP  COUNT NAME
0   1   AAA      5  xxx
1   1   AAA      5  xxx
2   1   CCC      5  xxx
3   2   BBB      6  yyy
4   2   CCC      6  yyy
5   2   AAA      6  yyy