[英]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.