我有以下这种情况。
表1
column_a column_b
1 10
2 20
3 30
4 40
表2
column_a new_column
1 10
2 20
3 30
5 0
如果两个表中column_a中的值匹配,则应使用表1 column_b中的相应值填充 new_column。如果不是,则应填充0 。
我可以在两个表上使用iterrows来做到这一点,但是有没有更好/有效的方法呢?
谢谢。
答案 0 :(得分:3)
map
+ fillna
df2['new_col'] = df2.column_a.map(df1.set_index('column_a').column_b).fillna(0)
print(df2)
column_a new_col
0 1 10.0
1 2 20.0
2 3 30.0
3 5 0.0
答案 1 :(得分:2)
使用np.where
df2.new_column = np.where(df1.column_a.eq(df2.column_a), df1.column_b, 0)
答案 2 :(得分:2)
另一个选择是合并:
df2.merge(df, on='column_a', how='left')
column_a column_b
0 1 10.0
1 2 20.0
2 3 30.0
3 5 NaN
# add replace and rename if you want
df2.merge(df, on='column_a', how='left').replace(np.nan, 0).rename(columns={'column_b':'new_column'})
column_a new_column
0 1 10.0
1 2 20.0
2 3 30.0
3 5 0.0
答案 3 :(得分:0)
在导入模块并构造了table1和table2之后。您可能需要这样的
mask = table1['column_a']==table2['column_a']
table2.loc[mask,'new_column']= table1.loc[table1['column_a']==table2['column_a'],'column_b']
table2.loc[~mask,'new_column'] = 0
请注意,table1和table2由
import pandas as pd
table1 = pd.DataFrame({'column_a':[1,2,3,4],'column_b':[10,20,30,40]})
table2 = pd.DataFrame({'column_a':[1,2,3,5]})