[英]How to pass to rows multiple groups of columns?
這是我先前問題的延續。
我有數據集:
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以及NAME_1
和NAME_2
的值傳遞到行中(考慮到以GROUP
和NAME
開頭的列數很大,所以我不想手動枚舉它們)。
我目前正在使用上面提到的上一個問題中提出的解決方案:
cols = ['ID', 'GROUP', 'COUNT', 'NAME']
df.set_index(['ID', 'COUNT', 'NAME']).stack().reset_index(name='GROUP')[cols]
但是,問題是我應該對NAME
應用相同的過程。 考慮到應該將多組列傳遞給行,是否可以更新此解決方案?
您可以使用與上一個答案相同的方法來兩次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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.