使用熊猫根据其他列删除/替换列值

时间:2019-07-25 11:29:07

标签: python pandas dataframe

我有一个像这样的数据框:

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

我想从col3值中删除col1值

最终数据帧应类似于<< / p>

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

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

4 个答案:

答案 0 :(得分:2)

.apply上将replaceaxis=1一起使用:

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

答案 1 :(得分:1)

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

%%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)

答案 2 :(得分:0)

也许这可能有效:

df.col3.str.replace(df.col1, "")

另请参阅: https://pandas.pydata.org/pandas-docs/stable/user_guide/text.html

答案 3 :(得分:0)

假设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都将替换为空字符串“”。