【问题标题】:Merge two dataframe when one has multiIndex in pandas当一个在熊猫中有multiIndex时合并两个数据框
【发布时间】:2021-04-14 00:53:23
【问题描述】:

我有 MultiIndex 数据框(表 1),我想合并来自另一个不是 multiIndex 的数据框(表 2)的特定列。

表一示例:

>>>            name          2020-10-21                   2020-10-22   ...
Column                     9    10    11   12          9    10    11    12   

0             A5          2.1   2.2   2.4  2.8        5.4   3.4   1.1   7.3
1             B9          7.2   1.2   14.5  7.5       3.4   5.2   6.4   8.1
2             C3          1.1   6.5   8.4   9.1       1.1   4.3   6.5   8.7
...

表2示例:

>>>name   indc   control   code       
0    A5   0.32    yes       1
1    C3   0.11    no        2
2    B18  0.23    yes       2
3    B9   0.45    no        3

我想根据表 2 中的键“名称”(以及表 1 中的“索引”)合并列“代码”以获取名称旁边的代码:

>>>          index              2020-10-21                   2020-10-22   ...
Column                code     9    10    11   12          9    10    11    12   

0             A5        1     2.1   2.2   2.4  2.8        5.4   3.4   1.1   7.3
1             B9        3    7.2   1.2   14.5  7.5       3.4   5.2   6.4   8.1
2             C3        2     1.1   6.5   8.4   9.1       1.1   4.3   6.5   8.7
...

我知道当索引不是多索引级别时如何合并,然后我这样做:

df = table1.merge(table2[['code','name']], how = 'left',
                left_on = 'index', right_on = 'name')

但现在我得到错误:

UserWarning:不同级别之间的合并可能会产生意想不到的结果 结果(左侧2级,右侧1级)warnings.warn(msg, 用户警告)

然后:

ValueError: 'index' 不在列表中

当我打印列时,我可以看到你就像元组,但我不知道为什么它说索引不在列表中,因为当我打印表 1 的 oclumns 时,我得到:

Index([   ('index', ''),  (2020-10-22, 9)...

所以我有点困惑。

我的最终目标:根据“名称”和“索引”列合并代码列

【问题讨论】:

  • 能否分享生成数据帧的代码,尤其是多索引?

标签: python pandas merge multi-index


【解决方案1】:

为了正确的工作需要MultiIndexDataFrames 中:

df2 = table2[['code','name']].rename(columns={'name':'index'})
df2.columns = pd.MultiIndex.from_product([df2.columns, ['']])


df = table1.merge(df2, how = 'left', on = [('index', '')])

#if necessary reorder columns names
cols = df.columns[:1].tolist() + df.columns[-1:].tolist() + df.columns[1:-1].tolist()

df = df[cols]
print (df)
  index code 2020-10-21                 2020-10-22               
                      9   10    11   12          9   10   11   12
0    A5    1        2.1  2.2   2.4  2.8        5.4  3.4  1.1  7.3
1    B9    3        7.2  1.2  14.5  7.5        3.4  5.2  6.4  8.1
2    C3    2        1.1  6.5   8.4  9.1        1.1  4.3  6.5  8.7

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 2016-01-01
    • 1970-01-01
    • 2018-07-22
    • 2021-05-30
    • 2017-09-02
    相关资源
    最近更新 更多