首页 > 解决方案 > Python Pandas 将选择性列转换为行

问题描述

我的数据集有一些关于不同年份的价格和销售额的信息。问题是每年实际上价格和销售的列标题都不同。例如 CSV 看起来像

项目 2018年价格 2019年价格 2020年价格 2018年销售额 2019年销售额 2020年销售额
一个 100 120 135 5000 6000 6500
110 130 150 2000 4000 4500
C 150 110 175 1000 3000 3000

我想向它展示这样的东西

项目 价格 销售量
一个 2018 100 5000
一个 2019 120 6000
一个 2020 135 6500
2018 110 2000
2019 130 4000
2020 150 4500
C 2018 150 1000
C 2019 110 3000
C 2020 175 3000

我像这样使用 Pandas 的融化功能 df.melt(id_vars = ['Items'], var_name="Year", value_name="Price")

但是我在为价格和销售额获取单独的列时遇到了困难,因为它在一列中给出了价格和销售额。谢谢

标签: pythonpandasdataframedata-sciencebackend

解决方案


让我们试试熊猫wide_to_long

pd.wide_to_long(df, i='Items', j='year', 
                stubnames=['Price', 'Sales'], 
                suffix=r'\d+', sep=' in ').sort_index()

              Price Sales
Items year              
A     2018    100   5000
      2019    120   6000
      2020    135   6500
B     2018    110   2000
      2019    130   4000
      2020    150   4500
C     2018    150   1000
      2019    110   3000
      2020    175   3000

推荐阅读