Python 基于数据库中isin()的结果复制行值
我有两个数据帧:Python 基于数据库中isin()的结果复制行值,python,python-2.7,python-3.x,pandas,dataframe,Python,Python 2.7,Python 3.x,Pandas,Dataframe,我有两个数据帧: df_a = pd.DataFrame({'A':[1,2,3,4],'B':[4,5,6,7],'ID':['a','b','c','d']}) df_a A B ID 0 1 4 a 1 2 5 b 2 3 6 c 3 4 7 d df_b = pd.DataFrame({'A':[1,2,3],'ID':['b','a','c']}) df_b['CopyB'] = "" A ID CopyB 0 1 b
df_a = pd.DataFrame({'A':[1,2,3,4],'B':[4,5,6,7],'ID':['a','b','c','d']})
df_a
A B ID
0 1 4 a
1 2 5 b
2 3 6 c
3 4 7 d
df_b = pd.DataFrame({'A':[1,2,3],'ID':['b','a','c']})
df_b['CopyB'] = ""
A ID CopyB
0 1 b
1 2 a
2 3 c
现在我想匹配两个数据帧中的ID列,并且在成功匹配后,我想将B的各个值从df_a复制到df_B['CopyB']。我尝试了df_b.loc[df_b['ID'].isin(df_a['ID']),'Copy']=df_a['b]
但这是不对的。然后我尝试使用“==”比较ID,但由于ID序列的长度不相等,因此出现了一个错误。有什么帮助吗?抱歉,如果这是一个非常琐碎的查询。您可以使用
merge
In [247]: df_b.merge(df_a, on=['ID'])
Out[247]:
A_x ID A_y B
0 1 b 2 5
1 2 a 1 4
2 3 c 3 6
In [248]: df_b.merge(df_a, on=['ID'])[['A_x', 'ID', 'B']].rename(columns={'A_x': 'A'})
Out[248]:
A ID B
0 1 b 5
1 2 a 4
2 3 c 6
使用join
df_b.join(df_a.set_index('ID').B, on='ID')
A ID B
0 1 b 5
1 2 a 4
2 3 c 6
join
对索引有效。因此,我将dfu a
的索引设置为ID
列,并访问B
列,以便dfu a.set\u index('ID').B
是一个系列,其中我要添加的列作为值,合并列作为索引。然后我使用join
。如果ID
是df_b
的索引,我就不必在参数上指定,但事实并非如此。如果将ID列设置为两个数据帧的公共索引,则可以轻松添加该列:
df_a = df_a.set_index('ID')
df_b = db_b.set_index('ID')
df_b['Copy B'] = df_a['B']
您的预期产量是多少?谢谢John。这真的很有帮助。@sacmax别忘了用绿色支票将其标记为答案。