我有两个数据框如下
DF1 :
article_id col1 col2
1 2 2.5
2 5 2.5
3 3 2.5
4 8 2.5
5 2 2.5
6 5 2.5
7 1 2.5
DF2 :
article_id somecol3
30 11
6 3
22 1
5 4
3 7
61 8
7 3
df1和df2的 article_id
都是唯一的。 df1和df2都有一些共同的article_id
,在上面(6,5,3,7)。我想要的是,更新 df2的somecol3的值来自df1的列col1的值,其中'article_id是常见的。所以在操作之后df2应该是这样的
article_id somecol3
30 11
6 5
22 1
5 2
3 3
61 8
7 1
答案 0 :(得分:0)
df2['somecol3'] = (df2['article_id'].map(df1.set_index('article_id')['col1'])
.combine_first(df2['somecol3'])
.astype(int))
print (df2)
article_id somecol3
0 30 11
1 6 5
2 22 1
3 5 2
4 3 3
5 61 8
6 7 1
df2['somecol3'] = (df2['article_id'].map(df1.set_index('article_id')['col1'])
.fillna(df2['somecol3'])
.astype(int))
print (df2)
article_id somecol3
0 30 11
1 6 5
2 22 1
3 5 2
4 3 3
5 61 8
6 7 1
update
的解决方案:
df2['somecol3'].update(df2['article_id'].map(df1.set_index('article_id')['col1']))
print (df2)
article_id somecol3
0 30 11
1 6 5
2 22 1
3 5 2
4 3 3
5 61 8
6 7 1
答案 1 :(得分:0)
使用merge
df1.merge(df[['article_id','col1']],on='article_id',how='left').fillna('')
Out[48]:
article_id col1
0 30
1 6 5
2 22
3 5 2
4 3 3
5 61
6 7 1
更新了
df2.merge(df1[['article_id', 'col1']], on='article_id', how='left').ffill(1).drop('somecol3',1)
Out[69]:
article_id col1
0 30.0 11.0
1 6.0 5.0
2 22.0 1.0
3 5.0 2.0
4 3.0 3.0
5 61.0 8.0
6 7.0 1.0