代码之家  ›  专栏  ›  技术社区  ›  Vishnudev Krishnadas

使用表中的另一列替换一列中的值的有效方法

  •  1
  • Vishnudev Krishnadas  · 技术社区  · 7 年前

    如何使用不同列[2]中的字符串值列表替换数据帧列[1]中的字符串值。

    数据

              0                       1            2              3
    0  3000 20%  dummy1 3000 dummy2 20%  [3000, 20%]  dummy1 dummy2
    

    我想用列2中的列表替换列1中的字符串值,即“dummy1 3000 dummy2 20%”,即“[3000,20%]”。所以3000和20%从字符串中替换为“”(空字符串),形成第3列(结果),即“dummy1 dummy2”

    代码

    df = pd.DataFrame([['3000 20%', 'dummy1 3000 dummy2 20%']])
    df[2] = df[0].str.split(' ')
    
    def replace_string(x):
        repl_string = str(x[1])
        for key in x[2]:
            repl_string = repl_string.replace(key, '')
        return ' '.join(repl_string.split())
    
    df[3] = df.apply(replace_string, axis=1)
    

    我目前已经写了上面的代码,对于大型数据帧来说速度很慢。我该如何提高这段代码的效率,或者有没有其他方法可以做到这一点?

    1 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    使用嵌套列表理解:

    df = pd.DataFrame([['3000 20%', 'dummy1 a 3000 dummy2 20%'],
                       ['abc 2%', 'klmn 3000 dummy2 2%']])
    print (df)
              0                         1
    0  3000 20%  dummy1 a 3000 dummy2 20%
    1    abc 2%       klmn 3000 dummy2 2%
    
    df[3] = [' '.join(y for y in j.split() if y not in i.split()) for i, j in zip(df[0], df[1])]
    print (df)
              0                         1                 3
    0  3000 20%  dummy1 a 3000 dummy2 20%   dummy1 a dummy2
    1    abc 2%       klmn 3000 dummy2 2%  klmn 3000 dummy2