【问题标题】:Parse pandas column names to create multi-indexed dataframe解析 pandas 列名以创建多索引数据框
【发布时间】:2022-01-21 05:53:00
【问题描述】:

我有一个如下所示的 DataFrame:

region   2008_indicatorA   2008_indicatorB  ...(2009..2019)...  2020_indicatorA   2020_indicatorB
=============================================================================================
State1   ...               ...              ...                 ...
State2   ...               ...              ...                 ...
...

我需要从列中提取年份并创建一个单独的列year,同时减少列数。生成的 DF 应如下所示:

region   year   indicatorA   indicatorB
========================================
State1   2008   ...          ...
State1   2009   ...          ...
...
State1  (..2020) ...         ...
...
State2   2008   ...          ...
...

我确信这种转换与reindex()unstack()stack() 有关系...但完全不知道该怎么做!

【问题讨论】:

    标签: python pandas reshape multi-index


    【解决方案1】:

    DataFrame.set_indexsplit 一起用于MultiIndex in columns,然后将DataFrame.rename_axisDataFrame.stack 重塑:

    print (df)
       region  2008_indicatorA  2008_indicatorB  2020_indicatorA  2020_indicatorB
    0  State1                1                3                5                8
    1  State2                7                5                3                9
    
    df1 = df.set_index('region')
    df1.columns = df1.columns.str.split('_', expand=True)
    df1 = df1.rename_axis(['year',None], axis=1).stack(0).reset_index()
    print (df1)
       region  year  indicatorA  indicatorB
    0  State1  2008           1           3
    1  State1  2020           5           8
    2  State2  2008           7           5
    3  State2  2020           3           9
    

    对于MultiIndex DataFrame 删除DataFrame.reset_index

    df1 = df.set_index('region')
    df1.columns = df1.columns.str.split('_', expand=True)
    df1 = df1.rename_axis(['year',None], axis=1).stack(0)
    print (df1)
                 indicatorA  indicatorB
    region year                        
    State1 2008           1           3
           2020           5           8
    State2 2008           7           5
           2020           3           9
    

    【讨论】:

      猜你喜欢
      • 2020-02-22
      • 2020-08-13
      • 2016-05-12
      • 2021-05-07
      • 1970-01-01
      • 2018-12-03
      • 2020-11-21
      • 1970-01-01
      • 2020-10-22
      相关资源
      最近更新 更多