簡體   English   中英

如何將多列列傳遞給行?

[英]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_1NAME_2的值傳遞到行中(考慮到以GROUPNAME開頭的列數很大,所以我不想手動枚舉它們)。

我目前正在使用上面提到的上一個問題中提出的解決方案:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM