Pandas,比较具有不同形状的数据框列

时间:2018-04-06 11:04:02

标签: python python-3.x pandas

我有两个不同形状的数据框,如下所示:

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

我想比较数据框depth1depth2中的ab列,如果匹配,我想将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做到这一点?

修改:depth1depth2列已排序

2 个答案:

答案 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