【发布时间】:2021-06-30 12:23:07
【问题描述】:
我在 Python Pandas 中有如下数据框:
import pandas as pd
import re
df = pd.DataFrame()
df["ADRESAT"] = ["Kowal Jan", "Nowak Adam PHU"]
df["NADAWCA"] = ["Jan Kowal", "Adam Nowak"]
我创建了 2 个新列:
-
col1 - 列“ADRESAT”中“NADAWCA”列的值
-
col2 - 其余值(“ADRESAT”列中的值超出“NADAWCA”列中的值)
df["col2"] = df.apply(lambda r: re.sub(r["NADAWCA"], '', r["ADRESAT"], flags = re.IGNORECASE).strip(), 轴=1) df["col1"] = df["NADAWCA"].str.title()
尽管如此,结果我得到了如下所示的 df。但正如你在第二行看到的那样,有一个错误。
- 在 col1 中正常(来自“NADAWCA”列的值,该值也在“ADRESAT”列中,但
- 在 col2 中,我只需要 PHU(表示“ADRESAT”列中的值超出了“NADAWCA”列中的值)
我的问题:如何修改我的代码以识别 Adam Nowak 和 Nowak Adam 是相同的值?
我需要如下结果:
【问题讨论】:
-
为什么
col2of line1 (Kowal Jan) 在您的预期输出中不为空? -
是的,你是对的,它应该是空的,我会改变它
-
在 col2 需要是 ADRESAT 的值减去 NADAWCA 的值,所以如果你在 NADAWCA 有 Jan Kowal,在 ADRESAT 有 Kowal Jan(其他顺序相同) col2 是空的,但在条款第二行的 PHU 是 ADRESAT 中唯一一个不在 NADAWCA 中的值,因此 PHU 在第 2 行的 col2 中是有原因的
-
我的问题是如何告诉 Python(使用我的代码或其他命题)Adam Nowak 和 Nowak Adam 是相同的值
-
好的。现在好多了:-)我很快就会写一个解决方案。