【问题标题】:How to add a column to a DataFrame based on a multi-index map如何基于多索引映射向 DataFrame 添加列
【发布时间】:2017-04-23 14:56:42
【问题描述】:

我有一个数据框df 如下:

# df.head(10)
          TYPE               A                  B  
0            0               5                 25     
1            1               7                 23     
2            5              10                 43     
3            1               5                 37     
4            2               4                 61     
5            3               1                 17   
6            0               8                 39     
7            2               4                 59  
8            4               2                  6  
9            0               3                 31  

我有一个多索引映射mapp,如下:

# mapp.head(10)
                  num  
AA      BB             
1        1          1 
         4          2 
         5          3 
        10          4 
        17          5 
        18          6 
2        3          7
         6          8
         9          9
3        3         10

我想像这样添加一列df['num']

          TYPE               A                  B           num
0            0               5                 25            74
1            1               7                 23            89
2            5              10                 43           129
3            1               5                 37            77
4            2               4                 61            62
5            3               1                 17             5
6            0               8                 39            98
7            2               4                 59            61
8            4               2                  6             8
9            0               3                 31            40

我尝试使用以下代码来实现它:

idx = df.set_index(['A', 'B']).index
df['num'] = mapp.loc[idx, 'num']

但是 Python 抛出异常:

Exception: cannot handle a non-unique multi-index!

我该如何解决?或者有没有其他方法可以解决这个问题?另外df的尺寸很大,我不喜欢用循环。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用DataFrame.join:

    df1 = df.join(mapp, on=['A','B'])
    print (df1)
       TYPE   A   B  num
    0     0   5  25  NaN
    1     1   7  23  NaN
    2     5  10  43  NaN
    3     1   5  37  NaN
    4     2   4  61  NaN
    5     3   1  17  5.0
    6     0   8  39  NaN
    7     2   4  59  NaN
    8     4   2   6  8.0
    9     0   3  31  NaN
    

    【讨论】:

    • 我多么愚蠢!我居然忘记加入了!!非常感谢你。
    猜你喜欢
    • 2016-11-08
    • 2016-05-03
    • 2020-05-07
    • 2017-10-29
    • 2017-10-06
    • 1970-01-01
    • 2022-10-06
    • 2020-08-29
    • 2017-04-30
    相关资源
    最近更新 更多