在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 中将 WAV 从立体声转换为单声道?

在python pandas df中将月份数转换为名称

Python将立体声.flac转换为单声道

如何在python中将excel文件转换为这种格式? [复制]

在 pandas/python 的同一数据框中将两列合并为一列

python 在Pandas(Python)中将整数转换为浮点格式