代码之家  ›  专栏  ›  技术社区  ›  JamesHudson81

根据条件添加2列的值

  •  0
  • JamesHudson81  · 技术社区  · 6 年前

    我有两个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合并在一起,但是我想加入列 DISTANCE 只有当df1.Distance中的值为0时,才添加df2.Distance的值。

    预期输出为:

    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 回复  |  直到 6 年前
        1
  •  3
  •   Erfan    6 年前

    首先我们 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'])
    
        2
  •  0
  •   BENY    6 年前

    给予 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