这是my previous question的延续。
我有数据集:
df =
ID GROUP_1 GROUP_2 GROUP_3 COUNT NAME_1 NAME_2
1 AAA AAA CCC 5 xxx yyy
2 BBB CCC AAA 6 yyy zzz
结果应该是这个:
new =
ID GROUP COUNT NAME
1 AAA 5 xxx
1 AAA 5 yyy
1 CCC 5 xxx
1 CCC 5 yyy
2 BBB 6 yyy
2 BBB 6 zzz
2 CCC 6 yyy
2 CCC 6 zzz
2 AAA 6 yyy
2 AAA 6 zzz
我想将GROUP_1,GROUP_2和GROUP_3,AND NAME_1
和NAME_2
的值传入行(考虑以GROUP
和NAME
开头的列数很大,所以我不想手动枚举它们。)
我目前正在使用上一个问题中提出的解决方案:
cols = ['ID', 'GROUP', 'COUNT', 'NAME']
df.set_index(['ID', 'COUNT', 'NAME']).stack().reset_index(name='GROUP')[cols]
然而,问题是我应该对NAME
应用相同的程序。考虑到应该将多组列传递给行,是否可以更新此解决方案?
答案 0 :(得分:0)
您可以使用与上一个答案相同的方法使用melt
两次
首先将NAME列熔化为一列
df1 = pd.melt(
df, ['ID', 'COUNT', 'GROUP_1', 'GROUP_2', 'GROUP_3'],
['NAME_1', 'NAME_2'],
value_name='NAME').drop('variable', axis=1)
输出
ID COUNT GROUP_1 GROUP_2 GROUP_3 NAME
0 1 5 AAA AAA CCC xxx
1 2 6 BBB CCC AAA yyy
2 1 5 AAA AAA CCC yyy
3 2 6 BBB CCC AAA zzz
然后通过GROUP列
再次融化这个df2 = pd.melt(
df1, ['ID', 'COUNT', 'NAME'],
['GROUP_1', 'GROUP_2', 'GROUP_3'],
value_name='GROUP').drop('variable', axis=1).drop_duplicates()
输出
ID COUNT NAME GROUP
0 1 5 xxx AAA
1 2 6 yyy BBB
2 1 5 yyy AAA
3 2 6 zzz BBB
5 2 6 yyy CCC
7 2 6 zzz CCC
8 1 5 xxx CCC
9 2 6 yyy AAA
10 1 5 yyy CCC
11 2 6 zzz AAA