匹配两个熊猫数据框值

时间:2019-01-28 18:12:06

标签: string pandas dataframe match locate

我有两个独立的熊猫数据框:

 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中的第二列号(熊猫索引号)。

在某些情况下,可能没有匹配项(在这种情况下,可以使用'0'),但匹配项永远不会超过1个(每个文件中只有一个数字/字母组合)。

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

'-998.0' for 'A0W030', 

'0.0' for A0C540, and 

'2.5' for D2F230 

0 for 467770, 467080, 467060, and 466950. 

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

1 个答案:

答案 0 :(得分:2)

您可以使用合并

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