如何通过与用不同字符分隔的另一个数据帧的结果进行比较来过滤掉一个python panda数据帧中的子字符串



如何通过比较另一个数据帧来过滤数据帧中的行。我的数据集由两列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(。

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

任何帮助都是非常可观的。

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

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

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

这将给你想要的结果

您可以先断开要列出的字符串,然后使用set操作查找剩余部分,然后再将它们连接回来。

df.apply(lambda x: '_'.join(set(x.Col1.split('_')) - set(x.Col2.split('_'))), axis=1)
0          One
1    Four_Five
2    Ten_Seven
3          Six

最新更新