将数据从一个数据帧复制到另一个数据帧,然后根据值替换数据

时间:2020-03-27 12:16:18

标签: python pandas

我有两个数据帧df1df1

df1的头部如下:

        date    last_location   cost_factor is_reporting
0 24/02/2014              510        1.0026            0
1 25/02/2014              498        0.9981            0
2 26/02/2014              492        0.9986            4
3 27/02/2014              489        0.9986            4
4 28/02/2014              493        0.9986            0
5 03/03/2014              485        0.9986            0

df2的头看起来像:

        date   dept     
0 24/02/2014      A            
1 25/02/2014      A             
2 26/02/2014      B             
3 27/02/2014      B                
4 28/02/2014      B               
5 03/03/2014      C 

我想将df1中的is_reporting列添加到df2中,但是我不想使用df1中的值,而是插入一个1 0以外的任何内容。因此,所需的结果将如下所示:

        date   dept  is_reporting
0 24/02/2014      A             0
1 25/02/2014      A             0 
2 26/02/2014      B             1 
3 27/02/2014      B             1    
4 28/02/2014      B             0   
5 03/03/2014      C             0

我认为我需要将is_reporting从df1复制到df2并使用replace,但是我不知道如何用1替换任何大于0的值

1 个答案:

答案 0 :(得分:1)

您需要DataFrame.merge左连接,并通过比较不等于Series.ne并转换为整数和DataFrame.assign来覆盖列来比较is_reporting列中的值:

df3 = df2.merge(df1[['date','is_reporting']], on='date', how='left')
df3 = df3.assign(is_reporting = df3['is_reporting'].ne(0).astype(int))

或交换操作:

df1 = df1.assign(is_reporting = df1['is_reporting'].ne(0).astype(int))
df3 = df2.merge(df1[['date','is_reporting']], on='date', how='left')

print (df3)
         date dept  is_reporting
0  24/02/2014    A             0
1  25/02/2014    A             0
2  26/02/2014    B             1
3  27/02/2014    B             1
4  28/02/2014    B             0
5  03/03/2014    C             0