我有两个不同形状的数据框,如下所示:
data = [[0.0, 0.5, 1.0, 1.5, 2.0, 2.5],['a','b','c','d','e','f']]
data = np.matrix(data).T
a = pd.DataFrame(data, columns=['depth1', 'label'])
b = pd.DataFrame([0, 0.5, 0.5, 0.5, 0.5, 1.0, 1.5, 1.5, 1.5, 2.0, 2.0, 2.5], columns=['depth2'])
>>> a
depth1 label
0 0.0 a
1 0.5 b
2 1.0 c
3 1.5 d
4 2.0 e
5 2.5 f
>>> b
depth2
0 0.0
1 0.5
2 0.5
3 0.5
4 0.5
5 1.0
6 1.5
7 1.5
8 1.5
9 2.0
10 2.0
11 2.5
我想比较数据框depth1
和depth2
中的a
和b
列,如果匹配,我想将label
列附加到数据框b
。所需的输出如下:
>>> new_df
depth2 label
0 0.0 a
1 0.5 b
2 0.5 b
3 0.5 b
4 0.5 b
5 1.0 c
6 1.5 d
7 1.5 d
8 1.5 d
9 2.0 e
10 2.0 e
11 2.5 f
如何使用Pandas做到这一点?
修改:depth1
和depth2
列已排序
答案 0 :(得分:3)
您的depth1
是对象类型,因此您可以使用:
a.depth1 = a.depth1.astype(float)
>>> pd.merge(a, b, left_on='depth1', right_on='depth2', how='right').drop('depth1', axis=1)
label depth2
0 a 0.0
1 b 0.5
2 b 0.5
3 b 0.5
4 b 0.5
5 c 1.0
6 d 1.5
7 d 1.5
8 d 1.5
9 e 2.0
10 e 2.0
11 f 2.5
答案 1 :(得分:1)
只需Merge:
In [120]: a.depth1 = pd.to_numeric(a.depth1)
In [122]: b.merge(a,how='left',right_on='depth1',left_on='depth2').drop('depth1',1)
Out[122]:
depth1 label
0 0.0 a
1 0.5 b
2 0.5 b
3 0.5 b
4 0.5 b
5 1.0 c
6 1.5 d
7 1.5 d
8 1.5 d
9 2.0 e
10 2.0 e
11 2.5 f