Python 如何通过CategoricalIndex对象合并两个数据帧

Python 如何通过CategoricalIndex对象合并两个数据帧,python,merge,Python,Merge,假设一个数据帧x: 这看起来像: A B A_level 10 NaN 2 NaN 11 NaN 4 NaN 12 3 3 (0, 3] 13 4 5 (3, 6] 14 5 1 (3, 6] 15 6 6 (3, 6] 16 7 9 (6, 15] 17 8 0 (6, 15] 18 9 4 (6, 15] 19 10 4 (6, 15] B A_level

假设一个数据帧x:

这看起来像:

     A   B  A_level
10   NaN  2   NaN
11   NaN  4   NaN
12   3  3   (0, 3]
13   4  5   (3, 6]
14   5  1   (3, 6]
15   6  6   (3, 6]
16   7  9  (6, 15]
17   8  0  (6, 15]
18   9  4  (6, 15]
19  10  4  (6, 15]
            B
A_level      
(0, 3]   3.00
(3, 6]   4.00
(6, 15]  4.25
然后,总结系列y的内容如下:

这看起来像:

     A   B  A_level
10   NaN  2   NaN
11   NaN  4   NaN
12   3  3   (0, 3]
13   4  5   (3, 6]
14   5  1   (3, 6]
15   6  6   (3, 6]
16   7  9  (6, 15]
17   8  0  (6, 15]
18   9  4  (6, 15]
19  10  4  (6, 15]
            B
A_level      
(0, 3]   3.00
(3, 6]   4.00
(6, 15]  4.25
我的问题是如何合并x和y并得到以下结果

    A  B  A_level  B_mean
10   NaN  2   NaN   NaN
11   NaN  4   NaN   NaN
12   3  3   (0, 3]   3.00
13   4  5   (3, 6]   4.00
14   5  1   (3, 6]   4.00
15   6  6   (3, 6]   4.00
16   7  9  (6, 15]   4.25
17   8  0  (6, 15]   4.25
18   9  4  (6, 15]   4.25
19  10  4  (6, 15]   4.25
我试过了

x['B_mean'] = y[x['A_level']]
但它返回keyrerror

下面的代码可以做类似的工作

z = pd.merge(x,y.reset_index(),how='left',on='A_level')
返回:

    A  B  A_level  B_mean
0 NaN  2      NaN     NaN
1 NaN  4      NaN     NaN
2   3  3   (0, 3]    3.00
3   4  5   (3, 6]    4.00
4   5  1   (3, 6]    4.00
5   6  6   (3, 6]    4.00
6   7  9  (6, 15]    4.25
7   8  0  (6, 15]    4.25
8   9  4  (6, 15]    4.25
9  10  4  (6, 15]    4.25
但是x和z的指数是不同的。我知道这是可以做到的

z.index = x.index
但我很好奇是否有更好的方法

提前多谢

您可以这样做,但它与您的解决方案几乎相同:

z = pd.merge(x,y.reset_index(),how='left',on='A_level').set_index(x.index)

可能是重复的谢谢安东。但是我仍然很好奇是否有像我第一次尝试的那样的解决方案x['B_-mean']=y[x['a_-level']].x['a_-level']有更多的指标可以包含在y中,所以我想这就是为什么你不能用索引访问y数据帧的原因:在[40]:y[x['a_-level']]keyrerror:[nan nan'0,3]'3,6]'3,6]'6,15]'6,15]\n'6,15]']不在索引中