Pandas:根据现有列向DataFrame添加列

时间:2018-03-06 00:31:39

标签: python pandas dataframe merge

我有2个pandas DataFrames,我在Python中操作,我想基于某个列(col_1)组合它们:

#df1
    col_1   col_2          
0       3       7            
1       4       8            
2       5       5    

#df2
  col_1    col_3 
0     4       78
1     5       89

,输出应如下所示:

    col_1   col_2   col_3
0   3       7       0
1   4       8       78
2   5       5       89  

我不确定如何使用'最佳做法'来解决这个问题。

谢谢。

4 个答案:

答案 0 :(得分:4)

假设你有:

df1=pd.DataFrame({'col_1': {0: 3, 1: 4, 2: 5}, 'col_2': {0: 7, 1: 8, 2: 5}})
df2=pd.DataFrame({'col_1': {0: 4, 1: 5}, 'col_3': {0: 78, 1: 89}})

您可以使用合并:

pd.merge(df1,df2,on='col_1',how='left').fillna(0)
Out[22]: 
   col_1  col_2  col_3
0      3      7    0.0
1      4      8   78.0
2      5      5   89.0

如果你需要col_3作为int(感谢piRSquared他的建议):

pd.merge(df1,df2,on='col_1',how='left').fillna(0, downcast='infer')

Out[25]: 
   col_1  col_2  col_3
0      3      7      0
1      4      8     78
2      5      5     89

答案 1 :(得分:4)

使用join后,您可以使用set_index

df1.join(df2.set_index('col_1'), on='col_1').fillna(0, downcast='infer')

   col_1  col_2  col_3
0      3      7      0
1      4      8     78
2      5      5     89

答案 2 :(得分:2)

如果对一个列通常有效,则映射一个系列。

df1 = pd.DataFrame({'col_1': [3, 4, 5],
                    'col_2': [7, 8, 5]})

df2 = pd.DataFrame({'col_1': [4, 5],
                    'col_3': [78, 89]})

df1['col_3'] = df1['col_1'].map(df2.set_index('col_1')['col_3']).fillna(0)

#    col_1  col_2  col_3
# 0      3      7    0.0
# 1      4      8   78.0
# 2      5      5   89.0

答案 3 :(得分:2)

也许combine_first

df1.set_index('col_1').combine_first(df2.set_index('col_1')).fillna(0).reset_index().astype(int)
Out[237]: 
   col_1  col_2  col_3
0      3      7      0
1      4      8     78
2      5      5     89