2016-12-06 29 views
1

我想根據dfB中是否存在作業標題(及其匹配的狀態)來向dfA添加一列。根據值是否存在於不同的DataFrame列中創建pandas DataFrame中的列

DFA =

Title  State Income 
Cashier WY  15000 
Cashier WY  20000 
Cashier WY  15000 
Manager WY  25000 
Cashier CO  15000 

DFB =

Title  State MostFreqIncome 
Cashier WY  15000 

英文:如果一個標題/國家對在DFA在DFB匹配任何名稱/州對,在DFA中創建一個新的列賦予附加到該標題/州對的MostFreqIncome。

期望DFA:

Title  State Income MostFreqIncome 
Cashier WY  15000  15000 
Cashier WY  20000  15000 
Cashier WY  15000  15000 
Manager WY  25000  NA 
Cashier CO  15000  NA 

這是我到目前爲止有:

is_in = dfA.Title.isin(dfB.Title) & dfA.State.isin(dfB.State) 

這給了我假/真,但如果這是真的我想dfA.MostFreqIncome = dfB.MostFreqIncome。如果這是假我想dfA.MostFreqIncome =「NA」

+0

你試過'pd.merge(dfA,dfB)'嗎? – Psidom

回答

2

可以merge兩個DataFrames A和B來創建新的數據框:

>>> dfA.merge(dfB, on=['Title', 'State'], how='left') 
    Title State Income MostFreqIncome 
0 Cashier WY 15000   15000.0 
1 Cashier WY 20000   15000.0 
2 Cashier WY 15000   15000.0 
3 Manager WY 25000    NaN 
4 Cashier CO 15000    NaN 

指定how='left'在這裏意味着我們僅僅只有dfA「標題/狀態鍵在合併的DataFrame中。

+0

這工作,謝謝。 雖然有一個問題 - 有沒有辦法讓收入保持一個字符串?這將其轉換爲數字。 (我有MemoryError轉換回來)。我使用的實際變量看起來像一個數字,但它是一個ID號碼。 –

+0

這很奇怪,「收入」列的類型不應該受到合併的影響 - 您使用的是哪種版本的熊貓? –

+0

原來這是原始數據集,它將其作爲數字;) 合併將小數加到它上面。一旦我改變了原來的字符串,它很好。 謝謝。 –

相關問題