匹配两个 pandas 数据帧值

matching two pandas dataframe values

我有两个独立的 pandas 数据帧:

 IDr = pd.read_csv(file1,header=None,delim_whitespace=True,usecols=[0])
 print IDr

           0
 0    467770
 1    467080
 2    467060
 3    466950
 4    A0W030
 5    A0C540
 6    D2F230
 ...

      IDg = pd.read_csv(file2,header=None,delim_whitespace=True,usecols=[0,4])

print IDg

      0      4
 0    C1I230    6.5
 1    466940   14.0
 2    466900    0.0
 25   467420    0.5
 26   A0W030 -998.0
 27   A0C540    0.0
 28   D2F230    2.5
 ...

任务是当IDr中的值与IDg中的id匹配时进行匹配,并提取IDg中的第二个列号(pandas索引号)。

在某些情况下可能没有匹配项(其中“0”也可以),但匹配项永远不会超过 1 个(每个文件中只有一个 number/letter 组合).

对于提供的示例,上面的匹配将是

'-998.0' for 'A0W030', 

'0.0' for A0C540, and 

'2.5' for D2F230 

0 for 467770, 467080, 467060, and 466950. 

我已经尝试了 locate、str.contains 和 str.match 函数,但似乎没有任何效果。有什么想法吗?

您可以使用合并

df1.merge(df2, how = 'left').fillna(0)

    0   4
0   467770  0.0
1   467080  0.0
2   467060  0.0
3   466950  0.0
4   A0W030  -998.0
5   A0C540  0.0
6   D2F230  2.5

或将列映射并分配给 df1

df1['new'] = df1['0'].map(df2.set_index('0')['4']).fillna(0)


    0       new
0   467770  0.0
1   467080  0.0
2   467060  0.0
3   466950  0.0
4   A0W030  -998.0
5   A0C540  0.0
6   D2F230  2.5