匹配两个 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
我有两个独立的 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