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