我需要根据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_1
,GROUP_2
和GROUP_3
的值放入行中(实际上我有更多以GROUP_
开头的列,即&#39 ;为什么我更喜欢使用df.filter(regex = "^GROUP")
)。
考虑到数据集非常大(约1Gb),我该怎么做?
答案 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