簡體   English   中英

熊貓的'concat / upsert'數據框

[英]Pandas 'concat/upsert' dataframes

我正在尋找一種基於共享的行值在2個數據框中選擇匹配行的有效方法,然后將它們向上插入到一個新的數據框中,我可以用來將它們之間的交集之間的差異映射到比較它們的第三個稍微不同的數據框中。

**Example:**

DataFrame1
FirstName, City
Mark, London
Mary, Dallas
Abi, Madrid
Eve, Paris
Robin, New York

DataFrame2
FirstName, City
Mark, Berlin
Abi, Delhi
Eve, Paris
Mary, Dallas
Francis, Rome

在數據框中,我可能在“名稱”上進行匹配/重疊,因此它們的交集是:

Mark, Mary, Abi, Eve

從聯接中排除的是:

Robin, Francis

我構造了一個數據框,該數據框允許比較兩個值:

DataFrameMatch
FirstName_1, FirstName_2, FirstName_Match, City_1, City_2, City_Match

並插入/更新(upsert),所以我的輸出是:

DataFrameMatch
FirstName_1  FirstName_2  FirstName_Match  City_1  City_2  City_Match
Mark         Mark         True             London  Berlin  False
Abi          Abi          True             Madrid  Delhi   False
Mary         Mary         True             Dallas  Dallas  True
Eve          Eve          True             Paris   Paris   True

然后,我可以報告兩個列表之間的差異以及哪些特定字段不同。

merge

根據您的輸出。 您只需要'FirstName'匹配的行。 然后,您需要另一列來評估城市是否匹配。

d1.merge(d2, on='FirstName', suffixes=['_1', '_2']).eval('City_Match = City_1 == City_2')

  FirstName  City_1  City_2  City_Match
0      Mark  London  Berlin       False
1      Mary  Dallas  Dallas        True
2       Abi  Madrid   Delhi       False
3       Eve   Paris   Paris        True

細節

您可以進行簡單的merge並最終得到

  FirstName    City
0      Mary  Dallas
1       Eve   Paris

默認情況下,它接受所有公共列。 所以我不得不通過on參數來限制列,因此on='FirstName'

d1.merge(d2, on='FirstName')

  FirstName  City_x  City_y
0      Mark  London  Berlin
1      Mary  Dallas  Dallas
2       Abi  Madrid   Delhi
3       Eve   Paris   Paris

這使我們更接近,但現在我想調整這些后綴。

d1.merge(d2, on='FirstName', suffixes=['_1', '_2'])

  FirstName  City_1  City_2
0      Mark  London  Berlin
1      Mary  Dallas  Dallas
2       Abi  Madrid   Delhi
3       Eve   Paris   Paris

最后,我將添加一個新列,以顯示'city_1'等於'city_2'的評估。 我選擇使用pandas.DataFrame.eval 您可以在上面看到結果。

暫無
暫無

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

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