我有两个数据帧F1和F2,其中包含列id1和id2。
F1包含两列F1[id1,id2]
。
F2包含三列[id1,id2,Description]
我想测试F2['id1']
是否存在于F1['id1']
或F2 ['id2'] exists in
F1 ['id2']中,那么我必须在F1中添加带有此id1或id2描述的colmun在F2`中。
F1和F2的内容为are HERE。我在F1上参加的输出是 also HERE
我这样创建了F1和F2
F1 = {'id1': ['x22', 'x13','NaN','x421'],'id2':['NaN','223','788','NaN']}
F1 = pd.DataFrame(data=F1)
F2 = {'id1': ['x22', 'NaN','NaN','x413','x421'],'id2':['NaN','223','788','NaN','233'],'Description':['California','LA','NY','Havnover','Munich']}
F2 = pd.DataFrame(data=F2)
实际上,我尝试了几种解决方案。但是没有什么可以帮助我做到这一点。 请帮助
答案 0 :(得分:0)
使用:
#if necessary replace string NaN to missing values
F1 = F1.replace('NaN', np.nan)
F2 = F2.replace('NaN', np.nan)
对于每列,DataFrame.drop_duplicates
删除重复项,DataFrame.dropna
删除重复值,DataFrame.set_index
列的id
创建索引:
s1 = F2.drop_duplicates('id1').dropna(subset=['id1']).set_index('id1')['Description']
s2 = F2.drop_duplicates('id2').dropna(subset=['id2']).set_index('id2')['Description']
然后将F1
中的列与Series.map
一起使用Series.combine_first
:
F1['Description'] = F1['id1'].map(s1).combine_first(F1['id2'].map(s2))
print (F1)
id1 id2 Description
0 x22 NaN California
1 x13 223 LA
2 NaN 788 NY
3 x421 NaN Munich