根据条件添加2列的值

时间:2019-08-11 19:59:25

标签: pandas

我有2个dfs:

df1

      'TOM'    'MIKE'  'DISTANCE'
'A'     5         7         2
'B'     4         5         9
'C'     3         3         0

df2

      'LAURA'    'LISA'  'DISTANCE'
'A'     4           3        0
'B'     4           3        9 
'C'     1           2        3

我已经将它们与axis = 1一起连接了,但是我想通过仅将df1.DISTANCE中的值添加为df2.DISTANCE的值来将DISTANCE列合并为1。

所需的输出将是:

df3

      'TOM'    'MIKE'  'DISTANCE'   'LAURA'   'LISA'
'A'     5         7         2         4         3
'B'     4         5         9         4         3
'C'     3         3         3         1         2

2 个答案:

答案 0 :(得分:3)

首先,我们将两个数据帧join在一起,以便我们可以指定一个rsuffix,以便可以从两个数据帧中区分出两个DISTANCE列。

然后,我们使用np.where将第一个数据帧中的0替换为与第二个数据帧的距离:

df3 = df1.join(df2, rsuffix='_2')
df3['DISTANCE'] = np.where(df3['DISTANCE'].eq(0), df3['DISTANCE_2'], df3['DISTANCE'])
df3 = df3.drop(columns=['DISTANCE_2'])

输出

   TOM  MIKE  DISTANCE  LAURA  LISA
0    5     7         2      4     3
1    4     5         9      4     3
2    3     3         3      1     2

或者我们可以使用.loc替换值:

df3 = df1.join(df2, rsuffix='_2')
df3.loc[df3['DISTANCE'].eq(0), 'DISTANCE'] = df3['DISTANCE_2']
df3 = df3.drop(columns=['DISTANCE_2'])

答案 1 :(得分:0)

尝试combine_first

df1["'DISTANCE'"].mask(df1["'DISTANCE'"].eq(0),inplace=True)
df=df1.combine_first(df2)
df
     'DISTANCE'  'LAURA'  'LISA'  'MIKE'  'TOM'
'A'         2.0      4.0     3.0       7      5
'B'         9.0      4.0     3.0       5      4
'C'         3.0      1.0     2.0       3      3