TL;DR:根據它們的多索引和它們共享的列合并兩個資料框。
兩個多索引資料框(稱為dfA和dfB)沒有唯一索引并且具有不同的形狀。然而,索引的級別 0 指定組,級別 1 指定兩者的材料。在 dataframedfA和dfB中,有一個名為 的列SR。
因此,正確的標識將涉及索引和SR列的值。
import pandas as pd
import numpy as np
tupA = [('G1','M1')]*3 [('G1','M2')] [('G2','M3')]*2
indA = pd.MultiIndex.from_tuples(tupA, names = ['Group', 'Material'])
dfA = pd.DataFrame({'SR': [3,5,10, 3,5,15],
'ValA': [1,2,1,4,5,6]},
index = ind
)
tupB = [('G1','M1')]*2 [('G1','M2')] [('G2','M3')]
indB = pd.MultiIndex.from_tuples(tupB, names = ['Group', 'Material'])
dfB = pd.DataFrame({'SR': [3,5,3,5],
'ValB': [2,4,5,6]},
index = indB
)
print(dfA,'\n', dfB)
產量:
SR ValA
Group Material
G1 M1 3 1
M1 5 2
M1 10 1
M2 3 4
G2 M3 5 5
M3 15 6
SR ValB
Group Material
G1 M1 3 2
M1 5 4
M2 3 5
G2 M3 5 6
任務:
根據多索引和列合并兩個資料框SR。不在其中的SR條目應替換為。dfBdfAnp.nan
期望的輸出:
合并的資料框應該是這樣的:
SR ValA ValB
Group Material
G1 M1 3 1 2.0
M1 5 2 4.0
M1 10 1 NaN
M2 3 4 5.0
G2 M3 5 5 6.0
M3 15 6 NaN
它具有所有行,dfA但對于那些SR不在其中的值dfB具有NaN。
嘗試解決方案:
我嘗試了許多左連接和外連接,但我無法獲得NaN. 該檔案確實有一個示例,NaN但它沒有使用多索引。
將不勝感激一些幫助。
uj5u.com熱心網友回復:
您可以將合并函式與傳遞給 on 引數的三個鍵一起使用:
dfA.merge(dfB,on=["Group","Material","SR"], how="left")
輸出 :
SR ValA ValB
Group Material
G1 M1 3 1 2.0
M1 5 2 4.0
M1 10 1 NaN
M2 3 4 5.0
G2 M3 5 5 6.0
M3 15 6 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525450.html
標籤:熊猫合并
上一篇:洗掉資料框中的未命名列會產生錯誤
下一篇:增加資料框的常量行
