我有两个包含ID1列的数据帧F1和F2。
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的内容为HERE。我在F1上参加的输出是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)
l1 =[]
for id1 in F2['id1']:
i=0
for id11 in F1['id1']:
i = i+1
length = 4 #number of lines of DF1
#print(id1)
if (id1 == id11) & (i<=4):
l1.append(F2['Description'])
else: l1.append('Null')
print(l1)
答案 0 :(得分:0)
不需要for
循环;使用merge
:
F2.merge(F1, left_on='id1', right_on='id1', how='left')
答案 1 :(得分:0)
编辑: 由于有问题而更改
希望我能正确理解您修改后的问题。无论如何,您需要将id1上的F1和F2合并,然后继续将结果与id2上的F2合并。之后,您fillna
并拖放“描述”列之一。
假设您的F1和F2如下:
In [362]: F1
Out[362]:
id1 id2
0 1 4
1 7 2
2 9 1
3 3 9
4 10 7
In [363]: F2
Out[363]:
Description id1 id2
0 One 1 3
1 Two 2 7
2 Three 3 3
合并到id1
上
In [365]: F1_id1 = F1.merge(F2[['Description', 'id1']], on=['id1'], how='left')
...:
In [366]: F1_id1
Out[366]:
id1 id2 Description
0 1 4 One
1 7 2 NaN
2 9 1 NaN
3 3 9 Three
4 10 7 NaN
在F1_id1
上向左id2
继续
In [367]: F1_id2 = F1_id1.merge(F2[['Description', 'id2']], on=['id2'], how='le
...: ft')
In [368]: F1_id2
Out[368]:
id1 id2 Description_x Description_y
0 1 4 One NaN
1 7 2 NaN NaN
2 9 1 NaN NaN
3 3 9 Three NaN
4 10 7 NaN Two
最后,fillna
并放下Description_y
In [372]: F1_id2['Description_x'] = F1_id2['Description_x'].fillna(F1_id2['Desc
...: ription_y'])
In [373]: F1_id2.drop(['Description_y'], 1)
Out[373]:
id1 id2 Description_x
0 1 4 One
1 7 2 NaN
2 9 1 NaN
3 3 9 Three
4 10 7 Two