【问题标题】:New empty subcolumn to all columns in DataFrame (Pandas)DataFrame(Pandas)中所有列的新空子列
【发布时间】:2022-11-06 00:01:04
【问题描述】:

我正在使用 Pandas 中的 multiindex - multicolumns DataFrame。我有 16 个主要栏目(0 级),例如气候变化、臭氧消耗等;每个子栏都包含 2 个子栏(级别 1):农业和转型。

我想为每个主列创建一个新的子列 (Transport),稍后我将用新数据填充它。问题是我不想做一个循环(不知道我会怎么做),但我找不到任何直接的方法来执行它。

已经尝试了循环选项:

for i in list(df.columns.levels[0]):
    df[i, 'Transport'] = ''

但是,这会复制主列并使用新的空字段创建它们。 无论如何,没有循环就可以做到吗?如果没有,我如何对这些新创建的列进行分组?

已经检查了这个问题,但不适合我: Add a subcolumn to each column on multilevel column index

提前致谢。

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    以以下玩具数据框为例:

    import pandas as pd
    
    df = pd.DataFrame(
        [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]],
        columns=pd.MultiIndex.from_product([("col1", "col2"), ("sub_col1", "sub_col2")]),
        index=[0, 1, 2],
    )
    
    print(df)
    # Output
          col1              col2
      sub_col1 sub_col2 sub_col1 sub_col2
    0        1        2        3        4
    1        5        6        7        8
    2        9       10       11       12
    

    这是使用 Pandas advanced indexing with hierarchical indexconcat 的一种方法:

    dfs = []
    for col in df.columns.levels[0]:
        tmp = df.copy()[col]
        tmp.loc[:, (col, "sub_col3")] = ""
        dfs.append(tmp)
    
    new_df = pd.concat(dfs, axis=1, keys=df.columns.levels[0])
    

    然后:

    print(new_df)
    # Output
          col1                            col2
      sub_col1 sub_col2 col1 sub_col3 sub_col1 sub_col2 col2 sub_col3
    0        1        2                      3        4
    1        5        6                      7        8
    2        9       10                     11       12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 2020-10-04
      相关资源
      最近更新 更多