I have two dataframes and would like to map the "K1" values from df2 onto a new column ["K1_mapped"] in df1, but only when the column values [["PC1", "PC2" and "PC3"]] are the same in the two dataframes.
DF1:
PC1 PC2 PC3
1 Kunststoffe Dachbahnen Elastomer-Dachbahnen
2 Kunststoffe Profile Plastikprofile
3 Kunststoffe Dachbahnen Elastomer-Dachbahnen
4 Kunststoffe Dachbahnen Elastomer-Dachbahnen
5 Kunststoffe Dachbahnen Elastomer-Dachbahnen
6 Kunststoffe Dachbahnen Elastomer-Dachbahnen
7 Holz Vollholz Brettschichtholzplatte
8 Holz Holz Holz
9 Holz Vollholz Brettschichtholzplatte
10 Baustoffe Steine Dachziegel
11 Daemmstoffe Holzfasern Holzfaserdaemmplatte
12 Daemmstoffe Holzfasern Holzfaserdaemmplatte
DF2:
PC1 PC2 PC3 K1
1 Holz Holz Holz Boeden und Decken
2 Holz Vollholz Balkenschichtholz Boeden und Decken
3 Holz Vollholz Bau-Schnittholz Waende
4 Holz Vollholz Brettschichtholz (BSH) Waende
5 Holz Vollholz Brettschichtholzplatte Waende
6 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
7 Kunststoffe Dachbahnen PVC-Dachbahnen Dachkonstruktion
8 Kunststoffe Dichtmassen Acrylat Waende
9 Kunststoffe Profile Plastikprofile Fenster
10 Daemmstoffe Holzfasern Holzfaserdaemmplatte Isolierung
Desired Output DF1_new:
PC1 PC2 PC3 K1
1 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
2 Kunststoffe Profile Plastikprofile Fenster
3 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
4 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
5 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
6 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
7 Holz Vollholz Brettschichtholzplatte Waende
8 Holz Holz Holz Boeden und Decken
9 Holz Vollholz Brettschichtholzplatte Waende
10 Baustoffe Steine Dachziegel NAN
11 Daemmstoffe Holzfasern Holzfaserdaemmplatte Isolierung
12 Daemmstoffe Holzfasern Holzfaserdaemmplatte Isolierung
I tried to map K1, but it only uses PC1 for mapping:
d1['K1_mapped'] = d1['PC1'].map(d2.drop_duplicates('PC1').set_index('PC1')['K1'])
But how can I incorporate "PC2" and "PC3" as determining factor for the mapping? - They should be equal in both data sets.
Any help is much appreciated!
CodePudding user response:
Try
df1_new = df1.merge(df2, on=["PC1", "PC2", "PC3"], how="left")
Check here and here for how merge
works.
Result for
df1 = pd.DataFrame(
{'PC1': ['Kunststoffe', 'Kunststoffe', 'Kunststoffe', 'Kunststoffe', 'Kunststoffe', 'Kunststoffe', 'Holz', 'Holz', 'Holz', 'Baustoffe', 'Daemmstoffe', 'Daemmstoffe'],
'PC2': ['Dachbahnen', 'Profile', 'Dachbahnen', 'Dachbahnen', 'Dachbahnen', 'Dachbahnen', 'Vollholz', 'Holz', 'Vollholz', 'Steine', 'Holzfasern', 'Holzfasern'],
'PC3': ['Elastomer-Dachbahnen', 'Plastikprofile', 'Elastomer-Dachbahnen', 'Elastomer-Dachbahnen', 'Elastomer-Dachbahnen', 'Elastomer-Dachbahnen', 'Brettschichtholzplatte', 'Holz', 'Brettschichtholzplatte', 'Dachziegel', 'Holzfaserdaemmplatte', 'Holzfaserdaemmplatte']}
)
df2 = pd.DataFrame(
{'PC1': ['Holz', 'Holz', 'Holz', 'Holz', 'Holz', 'Kunststoffe', 'Kunststoffe', 'Kunststoffe', 'Kunststoffe', 'Daemmstoffe'],
'PC2': ['Holz', 'Vollholz', 'Vollholz', 'Vollholz', 'Vollholz', 'Dachbahnen', 'Dachbahnen', 'Dichtmassen', 'Profile', 'Holzfasern'],
'PC3': ['Holz', 'Balkenschichtholz', 'Bau-Schnittholz', 'Brettschichtholz (BSH)', 'Brettschichtholzplatte', 'Elastomer-Dachbahnen', 'PVC-Dachbahnen', 'Acrylat', 'Plastikprofile', 'Holzfaserdaemmplatte'], 'K1': ['Boeden und Decken', 'Boeden und Decken', 'Waende', 'Waende', 'Waende', 'Dachkonstruktion', 'Dachkonstruktion', 'Waende', 'Fenster', 'Isolierung']}
)
is
PC1 PC2 PC3 K1
0 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
1 Kunststoffe Profile Plastikprofile Fenster
2 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
3 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
4 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
5 Kunststoffe Dachbahnen Elastomer-Dachbahnen Dachkonstruktion
6 Holz Vollholz Brettschichtholzplatte Waende
7 Holz Holz Holz Boeden und Decken
8 Holz Vollholz Brettschichtholzplatte Waende
9 Baustoffe Steine Dachziegel NaN
10 Daemmstoffe Holzfasern Holzfaserdaemmplatte Isolierung
11 Daemmstoffe Holzfasern Holzfaserdaemmplatte Isolierung