2017-06-30 128 views
2

我有兩個數據框:填寫基於來自大熊貓另一個數據幀相似的值在數據幀的列

df1        df2 
№ year      № year 
1 2010      373  
2 2010      374 
3 2010      375 
4 2010      376 
5 2010      ...     
... 
372 2017 
373 2017 
374 2017 
375 2017 
376 2017 
377 2017 
...       
899 2026 
900 2026 
901 2026 

我需要找到從DF2列「№」中的所有值的DF1,並填寫df2中的列「year」與來自df1的值。 結果應該是這樣的:

df2 
№ year 
373 2017 
374 2017 
375 2017 
376 2017 
... 

我試圖做這樣

df2['year'] = np.where(df2['№'] == df1['№'] , 'Insert value from df1['year'], '0') 

我第一次嘗試插入「1」,而不是一年,以檢查代碼工作,它給了我這樣一個錯誤

ValueError: Can only compare identically-labeled Series objects 

有什麼建議嗎?

回答

2

我覺得需要map通過Series通過set_index創建 - 如果某個值不匹配得到NaN S:

df2['year'] = df2['№'].map(df1.set_index('№')['year']) 

如果需要更換NaN s到原始值:

df2['year'] = df2['№'].map(df1.set_index('№')['year']).combine_first(df2['year']) 
+1

你也可以這樣做:'df2 ['year'] = df1.set_index('№')['year'] [df2 ['№']]。值' – jdehesa

+0

@jdehesa - 是的,它也可以。但在我看來,地圖更具有pandastic/pythonic。 – jezrael