2016-12-06 80 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

原来这是原始数据集,它将其作为数字;) 合并将小数加到它上面。一旦我改变了原来的字符串,它很好。 谢谢。 –

相关问题