我有一个像这样的数据框:
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
如何以最有效的方式使用熊猫?
答案 0 :(得分:2)
在.apply
上将replace
与axis=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都将替换为空字符串“”。