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别忘了用绿色支票将其标记为答案。