如何基于多索引映射向 DataFrame 添加列

2024-01-25

我有一个数据框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非常大,我宁愿不使用循环。


Use DataFrame.join http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.join.html:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何基于多索引映射向 DataFrame 添加列 的相关文章