【问题标题】: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 上使用.apply 和replace:
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 都被一个空字符串替换:“”。