Pandas的melt函数不支持列表作为var_name参数。

3

我有一个类似于这样的数据框:

  Country Person    A    B    C
0     USA    Bob  200  300  400
1  Canada  Alice  100  200  300

我想要将数据按A、B和C列进行透视概括,以便看起来像这样:

  Country Person Label  Count
0     USA    Bob     A    200
1     USA    Bob     B    300
2     USA    Bob     C    400
3  Canada  Alice     A    100
4  Canada  Alice     B    200
5  Canada  Alice     C    300

我尝试使用melt,但似乎它不支持var_name的列表形式。

import pandas as pd
df = pd.DataFrame(data=[['USA', 'Bob', 200, 300, 400],
                        ['Canada', 'Alice', 100, 200, 300]],
                  columns=['Country', 'Person', 'A', 'B', 'C'])
df.melt(['Country', 'Person'], var_name=['A', 'B', 'C'], value_name='Count')

1
我认为var_name应该只是“Label”,因为它用于重命名您的变量列。 - user16836078
2
df1.melt(['Country', 'Person'], var_name='Label', value_name='Count').sort_values(by=['Country','Person','Label'], ascending=[False,False,True]),@KevinChoonLiangYew 是对的,这行代码提供了精确的期望输出。 - Drakax
@Drakax,你可以将你的评论发布为答案:D - user16836078
我的评论是否值得成为答案呢?^^ - Drakax
1个回答

2
明白了你的问题。
import pandas as pd
df = pd.DataFrame(data=[['USA', 'Bob', 200, 300, 400],
                        ['Canada', 'Alice', 100, 200, 300]],
                  columns=['Country', 'Person', 'A', 'B', 'C'])
df1 = df.melt(['Country', 'Person'], var_name='Label', value_name='Count').sort_values(by=['Country','Person','Label'], ascending=[False,False,True])
print(df1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接