熊猫检查多行并复制另一行

时间:2019-03-01 04:25:43

标签: python pandas numpy dataframe

我有以下这种情况。

表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来做到这一点,但是有没有更好/有效的方法呢?

谢谢。

4 个答案:

答案 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]})

构造