首页 > 解决方案 > 如何通过与由不同字符分隔的另一个数据帧的结果进行比较来过滤掉一个 python pandas 数据帧中的子字符串

问题描述

如何通过比较另一个数据框来过滤数据框中的行。我的数据集由两列 Col1 和 Col2 组成。这里棘手的部分是查找 Col2 中的值由 '-' 分隔,但 Col1 由下划线 "_" 分隔。我试图通过与另一个数据框列的结果进行比较来过滤掉 col1 中的子字符串。

I have following dataset. 
--------------------------------------------------
Col1                   Col2        COL3 (Desired Output)                                                                                                                         
|---------------|----------------|---------------|
| One_Two_Three | Two-Three      | One           |
| Four_Five_Six | Five-Six       | Four          |
| Seven_Eight_Ni| Eight-Ni       | Seven         |

尝试编写以下代码但无法获得所需的输出。

df[col3]=df.apply(lambda x: x['col1'].replace(x['col2'], "").strip(),axis=1)

使用上面的代码行,我可以替换第一个子字符串(即在最后一行获得 _Six)。

也无法删除所需输出中的额外下划线。

任何帮助都将不胜感激。

标签: pythonpandasdataframe

解决方案


您可以添加rsrtip('_')and lstrip('_')which 将删除代码的前导和尾随下划线:

.replace('-','_')编辑:您可以在 Col2 上添加一个额外的替换-_.

df['Col3'] = df.apply(lambda x : x['Col1'].replace((x['Col2'].replace('-','_')), '').rstrip('_').lstrip('_'), axis=1)

印刷:

>>> df 
             Col1       Col2   Col3
0   One_Two_Three  Two-Three    One
1   Four_Five_Six   Five-Six   Four
2  Seven_Eight_Ni   Eight-Ni  Seven

这会给你你想要的结果


推荐阅读