python - Python:DataFrame.melt - 如何选择一系列列作为标识符变量?
问题描述
我正在尝试更改数据集的结构
目前有:
RE id Country 0 1 2 ... n
1001 CN,TH CN TH nan ... nan
1002 UK UK nan nan ... nan
我已将 Country 列拆分出来,因此添加了其他列。现在我正在尝试使用 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
解决方案
我认为问题在于您错误地引用了列名。另外,我相信您的代码中id_vars
(我认为应该是Re id
)和value_vars
(列名0
和1
)倒置了。
这是我的处理方法
进口
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
作为您想要的 2 列melt
(即,列名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
列。
推荐阅读
- javascript - Electron:Dragula 不工作?
- php - PHPMailer 问题 Mailer 错误:无法实例化邮件功能
- c++ - 如何找到在 WebAssembly 中运行的 Qt 应用程序堆栈溢出的原因?
- java - 为什么我的变量设置后为空?
- php - 在 Blade 中获取 v-for 的循环索引
- laravel - electron-vue 应用程序中的 Laravel 回声 - 加入()不起作用
- python - 将多 for 循环 if/else 转换为列表理解
- vba - 存储当前单元格值,添加公式然后将格式更改为自定义
- reactjs -
显示不同类型问题的组件失败类型保护 - python - 变量不在嵌套函数之间传递