【问题标题】:Merge 3 multiindex dataframes to make one multiindex dataframe合并 3 个多索引数据帧以创建一个多索引数据帧
【发布时间】:2021-01-06 07:58:13
【问题描述】:

我有 3 个数据框:

df1 是

                   Total  Total  Total
Tool Technology     One    Two   Three
Alt    AI            15     6     9  

df2 是

                   Check  Check  Check
Tool Technology     One    Two   Three
Alt    AI           10      4     6

df3 是

                   Uncheck  Uncheck  Uncheck
Tool Technology     One      Two      Three
Alt    AI           18        11        7  

合并后的最终数据框应该是这样的

                   Total  Total  Total   Check  Check  Check   Uncheck   Uncheck  Uncheck
Tool Technology     One    Two   Three    One    Two   Three    One       Two      Three
Alt    AI           10      4     6        15     6     9       18         11        7 

我怎样才能做到这一点?

【问题讨论】:

  • 您是否尝试过在 axis=1 上连接 (pd.concat) 数据帧?
  • 是的,我试过了,但在那个工具和技术中每次都重复
  • 如果ToolTechnology 重复,可能不是索引而是列。试试dfs = [df1,df2,df3],然后pd.concat((df.set_index(['Tool','Technology']) for df in dfs),axis=1)
  • 这是多索引,因此会出现如下错误:KeyError:“['Tool', 'Technology'] 均不在列中”。我检查 df1.columns: MultiIndex([('Unnamed: 0_level_0', 'Tool'), ('Unnamed: 1_level_0', 'Technology'),......])
  • 您的示例似乎不适合数据本身...

标签: python pandas multi-index


【解决方案1】:

三种合并多索引行的方法。目前尚不清楚您的 DataFrames 是否也具有多索引列。提供使用to_dict()方法

import io
df1 = pd.read_csv(io.StringIO("""                   Total  Total  Total
Tool Technology     One    Two   Three
Alt    AI            15     6     9  """), sep="\s+", header=1).set_index(["Tool","Technology"])
df1 = df1.rename(columns={c:f"Total {c}" for c in df1.columns})
df2 = pd.read_csv(io.StringIO("""                   Check  Check  Check
Tool Technology     One    Two   Three
Alt    AI           10      4     6"""), sep="\s+", header=1).set_index(["Tool","Technology"])
df2 = df2.rename(columns={c:f"Check {c}" for c in df2.columns})

print(pd.concat([df1,df2], axis=1).to_string())
print(df1.join(df2).to_string())
print(df1.merge(df2, on=["Tool","Technology"]).to_string())

输出

                 Total One  Total Two  Total Three  Check One  Check Two  Check Three
Tool Technology                                                                      
Alt  AI                 15          6            9         10          4            6
                 Total One  Total Two  Total Three  Check One  Check Two  Check Three
Tool Technology                                                                      
Alt  AI                 15          6            9         10          4            6
                 Total One  Total Two  Total Three  Check One  Check Two  Check Three
Tool Technology                                                                      
Alt  AI                 15          6            9         10          4            6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2021-12-13
    • 2019-08-11
    • 2022-12-17
    • 2019-01-02
    • 2015-06-21
    相关资源
    最近更新 更多