我想改变我的数据集的结构
当前拥有:
RE id Country 0 1 2 ... n
1001 CN,TH CN TH nan ... nan
1002 UK UK nan nan ... nan
我将“国家/地区”列拆分为其他列。现在我试图用df.melt得到这样的:
RE id var val
1001 0 CN
1001 0 TH
所以,我最终可以通过使用旋转得到这个
RE id Country
1001 TH
1001 CN
我尝试过:
df = a.melt(id_vars=[a[[0]],a[[1]],a[[2]]], value_vars=['RE id'])
如何选择数据框中的列范围用作标识符变量? https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.DataFrame.melt.html#pandas.DataFrame.melt
答案 0 :(得分:0)
我认为问题是您未正确引用列名。另外,我相信您在代码中颠倒了id_vars
(我想应该是Re id
和value_vars
(列名0
和1
)。 / p>
这是我的处理方式
进口
import pandas as pd
import numpy as np
这是数据的一部分,足以证明可能的问题
a = [['Re id', 0, 1],[1001,'CN','TH'],[1002,'UK',np.nan]]
df = pd.DataFrame(a[1:], columns=a[0])
print(df)
Re id 0 1
0 1001 CN TH
1 1002 UK NaN
现在,将pd.melt
与
id_vars
指向Re id
value_vars
作为您要melt
的2列(即列名0
和1
)df_melt = pd.melt(df, id_vars=['Re id'], value_vars=[0,1], value_name='Country')
df_melt.sort_values(by=['Re id', 'Country'], ascending=[True,False], inplace=True)
print(df_melt)
Re id variable Country
2 1001 1 TH
0 1001 0 CN
1 1002 0 UK
3 1002 1 NaN
此外,由于您在单独的列(Country
,0
中有1
个名称,所以我认为根本不需要使用Country
列