在python pandas中将多年列转换为单年列(整洁格式)[重复]
Posted
技术标签:
【中文标题】在python pandas中将多年列转换为单年列(整洁格式)[重复]【英文标题】:Convert multiple year columns into single year column (tidy format) in python pandas [duplicate] 【发布时间】:2020-02-17 03:36:12 【问题描述】:我的数据集是:
我想把它转换成:
如何在 Python 中使用 pandas 做到这一点?
它已解决,感谢您抽出宝贵时间提供帮助!!!为所有人 +1
【问题讨论】:
【参考方案1】:试试这个:
pd.melt(df, id_vars=['name'], value_vars=['2016', '2017', '2018',"2019"],var_name='year', value_name='value').sort_values('name')
输出:
+----+-------+-------+-------+
| | name | year | value |
+----+-------+-------+-------+
| 0 | abc | 2016 | 1 |
| 2 | abc | 2017 | 2 |
| 4 | abc | 2018 | 5 |
| 6 | abc | 2019 | 9 |
| 1 | def | 2016 | 5 |
| 3 | def | 2017 | 8 |
| 5 | def | 2018 | 8 |
| 7 | def | 2019 | 4 |
+----+-------+-------+-------+
【讨论】:
【参考方案2】:你可以使用
a = df.columns[1:]
df.melt(id_vars='name',value_vars = a,var_name='year').sort_values('name')
【讨论】:
【参考方案3】:你可以使用pandas.melt而不指定value_vars
如果未指定,则使用所有未设置为 id_vars 的列。
df.melt(id_vars='name', var_name='year').sort_values('name')
name year value
0 abc 2016 1
2 abc 2017 2
4 abc 2018 5
6 abc 2019 9
1 def 2016 5
3 def 2017 8
5 def 2018 8
7 def 2019 4
【讨论】:
【参考方案4】:pandas.melt
是将数据框转换为 tidy format 的最简单方法。
将 DataFrame 从宽格式转为长格式,可选择保留标识符变量集。
另一种方法是pandas.wide_to_long
从宽面板到长格式。与 melt 相比,灵活性较差,但更易于使用。
import pandas as pd
# create dataframe
df = pd.DataFrame('name': ['abc', 'def'],
'2016': [1, 5],
'2017': [2, 8],
'2018': [5, 8],
'2019': [9, 4])
name 2016 2017 2018 2019
abc 1 2 5 9
def 5 8 8 4
# melt df
df_melt = df.melt(id_vars='name', value_vars=['2016', '2017', '2018', '2019'])
name variable value
abc 2016 1
def 2016 5
abc 2017 2
def 2017 8
abc 2018 5
def 2018 8
abc 2019 9
def 2019 4
【讨论】:
以上是关于在python pandas中将多年列转换为单年列(整洁格式)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在python中将excel文件转换为这种格式? [复制]