2015-11-18 195 views
0

在數據幀更換單個值我有一個數據幀(dfdirnoswaps),其中一列包含ISINs和所有其他行包含一個價值「方向」。單獨的數據幀(dfextended)只有一列也包含ISIN,其中一些(但不一定是全部)ISIN與其他數據幀相匹配。我希望能夠在數據幀之間匹配常見的ISIN,並且一旦建立,只有在ISIN位於兩個數據幀中的情況下,才能將dfdirnoswaps中的另一列從「方向」更改爲「擴展」。如何找到和蟒蛇

我試圖做到這一點是如下的方式:

dfdirnoswaps = pd.concat([dfdirnoswaps, dfextended], axis =1) 

到第二數據框連接到第一。但是,這與相應行上的ISIN不匹配,將它們作爲單獨的行快速連接到第一個數據幀。

如果上面有工作我的下一個步驟將是查找和替換如下:

for row in dfdirnoswaps: 
    if dfdirnoswaps['ISIN'] == dfdirnoswaps['ISIN2']: 
     row in dfdirnoswaps['Strategy'] == 'Extended' 

(「戰略」是一個包含所有行「方向」的列名)

我想過我會怎麼處理這在Excel中,因此很可能有一個更有效的方式來做到這一點比上面的,而我歡迎任何建議。

+3

看到了如何創建一個可重複的例子,這是問一個很好的問題 –

回答

1

如果我正確理解你的問題,你可以使用數據框的isin()方法與屏蔽來實現這一目標一起。讓我們首先創建一個看起來像你的一些假的數據:

import pandas as pd 

df1 = pd.DataFrame({'ISIN': [1, 2, 3, 5]}) 
df1['Strategy'] = 'Direction' 
print(df1) 
    ISIN Strategy 
0  1 Direction 
1  2 Direction 
2  3 Direction 
3  5 Direction 

df2 = pd.DataFrame({'ISIN':[3, 4, 5, 6]}) 
print(df2) 
    ISIN 
0  3 
1  4 
2  5 
3  6 

現在我們使用isin()和改變這些結果'Extended'計算布爾面膜:

matches = df1['ISIN'].isin(df2['ISIN']) 
df1.loc[matches, 'Strategy'] = 'Extended' 
print(df1) 
    ISIN Strategy 
0  1 Direction 
1  2 Direction 
2  3 Extended 
3  5 Extended 

(注意:isin()方法檢查每個值是另一個序列;與您的"ISIN"列名稱的相似性純屬巧合)。

+0

由於所必需的大熊貓標籤維基 - 和假數據 - 上面得很完美。作爲後續,我將如何完全相同,而不是替換字符串,將兩個浮點值一起添加? – Oaka13