从基于另一列的列中删除子字符串

2024-10-01 11:20:49 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使用一列中的值(作为字符串)来确定从另一列中删除的内容。列的其余部分必须保持不变。在

示例数据:

import pandas as pd

dfTest = pd.DataFrame({
    'date': ['190225', '190225', '190226'],
    'foo': ['190225-file1_190225', '190225-file2_190225', '190226-file3_190226']
})

dfTest

结果数据帧:

^{pr2}$

我需要创建“bar”列,其中“foo”删除了所有“date”匹配项。在

我要找的是:

   |    date   |         foo          |   bar
-----------------------------------------------
0  |   190225  | 190225-file1_190225  | -file1_
1  |   190225  | 190225-file2_190225  | -file2_
2  |   190226  | 190226-file3_190226  | -file3_

“date”列的内容,无论它们出现在“foo”的每一行的开头、中间还是结尾,都需要删除

我尝试过一些类似下面的代码,但它不起作用。只复制原始列而不替换它。请注意,更改regex=False不会影响结果。在

dfTest['bar'] = dfTest['foo'].str.replace(str(dfTest['date']), '')

#or (removing .str, gives same result):

#dfTest['bar'] = dfTest['foo'].replace(str(dfTest['date']), '')

两者的结果如下表所示(“bar”中的结果完全相同):

   |    date   |         foo          |         bar
-----------------------------------------------------------
0  |   190225  | 190225-file1_190225  | 190225-file1_190225  
1  |   190225  | 190225-file2_190225  | 190225-file2_190225  
2  |   190226  | 190226-file3_190226  | 190226-file3_190226  

如何删除日期列的内容,但保留原始数据?在


Tags: 数据字符串import示例内容datefoobar
2条回答

埃迪: 我注意到,在lambda上使用replace时,它并不像预期的那样工作,所以我将其拆分成一个函数。在

def replace(str1, str2):
    return str1.replace(str2, '')


dfTest['bar'] = dfTest.apply(lambda row: replace(row['foo'], row['date']), axis=1)

所以,我试了一下,效果很好:

dfTest['bar'] = dfTest.apply(lambda row : row['foo'].replace(str(row['date']), ''), axis=1)

相关问题 更多 >