簡體   English   中英

如何識別 Python Pandas Data Frame 列中值的順序?

[英]How to recognize order of values in column in Python Pandas Data Frame?

我在 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(),axis=1) df["col1"] = df["NADAWCA"].str.title()

盡管如此,結果我有如下 df 。 但是正如您在第二行中看到的那樣,有一個錯誤。

  • 在 col1 中是可以的(來自“NADAWCA”列的值也位於“ADRESAT”列中,但是
  • 在 col2 中,我只需要 PHU(意味着來自“ADRESAT”列的值超出 valyes,也在列“NADAWCA”中)

在此處輸入圖片說明

我的問題:如何修改我的代碼以識別 Adam Nowak 和 Nowak Adam 是相同的值?

我需要如下結果:

在此處輸入圖片說明

由於順序很重要,使用set是不可能的,所以我們需要一個一個檢查每個單詞:

# x[0] -> ADRESAT, x[1] -> NADAWCA
intersection = lambda x: ' '.join([x1 for x1 in x[1].split()
                             if x1.lower() in x[0].lower().split()])

difference = lambda x: ' '.join([x0 for x0 in x[0].split()
                           if not x0.lower() in x[1].lower().split()])

df['col1'] = df[['ADRESAT', 'NADAWCA']].apply(intersection, axis='columns')
df['col2'] = df[['ADRESAT', 'NADAWCA']].apply(difference, axis='columns')
>>> df
          ADRESAT     NADAWCA        col1 col2
0       Kowal Jan   Jan Kowal   Jan Kowal
1  Nowak Adam PHU  Adam Nowak  Adam Nowak  PHU

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM