2
我想連接兩個dataframes:重複IFERROR和VLOOKUP在大熊貓加入
df1 = pd.DataFrame({'Banner': {0: 'banner1', 1: 'banner2', 2: 'banner3'},
'Campaign': {0: 'campaign1', 1: 'campaign2', 2: '12345'},
'Country ': {0: 'de', 1: 'it', 2: 'de'},
'Date': {0: '1/1/2016', 1: '2/1/2016', 2: '1/1/2016'},
'Value_1': {0: 10, 1: 5, 2: 20}})
df2 = pd.DataFrame({'Banner': {0: 'banner1', 1: 'banner2', 2: 'banner3', 3: 'banner4', 4: 'banner5'},
'Campaign': {0: 'campaign1',1: 'campaign2', 2: 'none',3: 'campaign4',4: 'campaign5'},
'Country ': {0: 'de', 1: 'it', 2: 'de', 3: 'en', 4: 'en'},
'Date': {0: '1/1/2016', 1: '2/1/2016', 2: '1/1/2016', 3: '3/1/2016', 4: '4/1/2016'},
'Value_2': {0: 5, 1: 10, 2: 15, 3: 20, 4: 25},
'id_campaign': {0: 'none', 1: 'none', 2: '12345', 3: 'none', 4: 'none'}})
編輯: 讓我們想象的選項:
df1 = pd.DataFrame({'Banner': {0: 'banner1', 1: 'banner2', 2: 'banner3'},
'Campaign': {0: 'campaign1', 1: 'campaign2', 2: '12345'},
'Date': {0: '1/1/2016', 1: '2/1/2016', 2: '1/1/2016'},
'Value_1': {0: 10, 1: 5, 2: 20}})
我不得不加入DF2與DF1在鍵上:
- 日期
- 運動
- 橫幅
這裏的問題是,當在關鍵「戰役」中沒有找到匹配的,關鍵應該切換到字段「id_campaign」。
我想獲得該數據幀:
df_joined = pd.DataFrame({'Banner': {0: 'banner1', 1: 'banner2', 2: 'banner3', 3: 'banner4', 4: 'banner5'},
'Campaign': {0: 'campaign1', 1: 'campaign2', 2: 'none', 3: 'campaign4', 4: 'campaign5'},
'Country ': {0: 'de', 1: 'it', 2: 'de', 3: 'en', 4: 'en'},
'Date': {0: '1/1/2016', 1: '2/1/2016', 2: '1/1/2016', 3: '3/1/2016', 4: '4/1/2016'},
'Value_1': {0: 10, 1: 5, 2: 20, 3: 0, 4: 0},
'Value_2': {0: 5, 1: 10, 2: 15, 3: 20, 4: 25},
'id_campaign': {0: 'none', 1: 'none', 2: '12345', 3: 'none', 4: 'none'}})
任何幫助非常感謝。
它完美的作品:我只是需要一個額外的澄清,以便更好地瞭解加入。 如果df1不包含「國家」列,我會我會得到相同的df3?我會編輯我的問題。 – xxxvinxxx
我覺得'df1'都是一樣的。也許一些錯誤的副本。 – jezrael
好的,我嘗試更好地解釋我的解決方案:所以想法非常簡單 - 如果使用內部連接,所有密鑰都必須匹配。因此,如果使用3個鍵'on = ['Date','Campaign','Banner']'而有些不匹配,則省略。問題關鍵在'Campaign'列中。所以我創建了另一個'merge',其中省略了這個有問題的鍵,並且你得到另一個輸出'df4'。但是你只需要'Value_1'列,並且需要替換'df3 ['Value_1']'的所有值,其中'NaN'(不匹配)。所以它增加值'20',第一行和第二行的值不會被替換。如果我的解釋不清楚(我經常解釋不清),請給我一個問題。謝謝 – jezrael