【问题标题】:Remove/replace columns values based on another columns using pandas使用 pandas 删除/替换基于另一列的列值
【发布时间】:2019-07-25 11:29:07
【问题描述】:

我有一个这样的数据框:

df
col1     col2      col3
 ab       1        prab
 cd       2        cdff
 ef       3        eef

我想从 col3 值中删除 col1 值

最终的数据框应该是这样的

df
col1     col2      col3
 ab       1        pr
 cd       2        ff
 ef       3        e

如何以最有效的方式使用熊猫?

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

axis=1 上使用.applyreplace

df['col3'] = df.apply(lambda x: x['col3'].replace(x['col1'], ''), axis=1)

输出

  col1  col2 col3
0   ab     1   pr
1   cd     2   ff
2   ef     3    e

【讨论】:

    【解决方案2】:

    看起来循环是不可避免的,因为您必须处理替换/删除子字符串。在这种情况下,列表推导可能会派上用场:

    %%timeit
    df.apply(lambda x: x['col3'].replace(x['col1'], ''), axis=1)
    
    # 767 µs ± 24.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    同时

    %%timeit
    [a.replace(b,'') for a,b in zip(df['col3'], df['col1'])]
    
    # 24.4 µs ± 3.18 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    

    【讨论】:

      【解决方案3】:

      假设 df 是一个矩阵:

      df = [["ab",1,"prab"],["cd",2,"cdff"],["ef",3,"eef"]]
      

      您要删除每一行的每个值 (col3) 中的键 (col1):

      for row in df:
        row[2] = row[2].replace(row[0],"")
      

      按照本文档,每次出现的 col1 都被一个空字符串替换:“”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-31
        • 2019-07-16
        • 2019-08-10
        • 2021-05-10
        • 1970-01-01
        • 2019-01-02
        相关资源
        最近更新 更多