2017-08-23 20 views
-1

比方說,我有一個數據幀,我得到每週和希望更新是基於每週報告更新了跟蹤器,例如:如何使用DataFrame執行對帳?

這是一個每週報告中,我得到:

ID Cost 
X12 500 
X54 100 
X52 150 
X45 200 
X32 435 

我對主要指標跟蹤器,需要更新基礎上,每週報告一個數據幀:

ID Cost 
X12 34 
X54 467 
X52 234 
X45 3453 
X37 4664  
X76 34 
X57 467 
X52 23465 
X48 547 
X32 34 

我想從數據幀1取號,並付諸數據幀2,這將導致:

ID Cost 
X12 500 
X54 100 
X52 150 
X45 200 
X37 4664  
X76 34 
X57 467 
X56 23465 
X48 547 
X32 435 

我該如何去執行這樣的功能,從一個DataFrame到另一個DataFrame。我假設我們使用for循環並遍歷第一個DataFrame,但是如何設置它?

謝謝!

回答

1

如果訂單不是問題,那麼

In [1178]: dfw.set_index('ID').combine_first(dfo.set_index('ID')).reset_index() 
Out[1178]: 
    ID Cost 
0 X12 500.0 
1 X32 435.0 
2 X37 4664.0 
3 X45 200.0 
4 X48 547.0 
5 X52 150.0 
6 X52 150.0 
7 X54 100.0 
8 X57 467.0 
9 X76 34.0 

這將採取任何新的ID增加的護理以及。

+0

我將能夠做到這一點,同時保持我的相同順序提供? – sgerbhctim

+0

另外,這會跳過ID中的NaN值嗎? – sgerbhctim

1

您可以使用地圖和combine_first

df2['Cost'] = df2['ID'].map(df1.set_index('ID')['Cost']).combine_first(df2['Cost']) 

你得到

ID Cost 
0 X12 500.0 
1 X54 100.0 
2 X52 150.0 
3 X45 200.0 
4 X37 4664.0 
5 X76 34.0 
6 X57 467.0 
7 X52 150.0 
8 X48 547.0 
9 X32 435.0 
+0

假設我有一個帶有NaN值的ID。它會跳過它嗎? – sgerbhctim

+1

在df1或df2中使用nan的ID?假設我們通過在df2中引入nan來測試代碼,df2.loc [df2.ID =='X12','Cost'] = np.nan。我建議的代碼有效。 – Vaishali

0

使用drop_duplicates

rep.append(track).drop_duplicates('ID') 

    ID Cost 
0 X12 500 
1 X54 100 
2 X52 150 
3 X45 200 
4 X32 435 
4 X37 4664 
5 X76 34 
6 X57 467 
8 X48 547 

如果你想重置指數

rep.append(track).drop_duplicates('ID').reset_index(drop=True) 

    ID Cost 
0 X12 500 
1 X54 100 
2 X52 150 
3 X45 200 
4 X32 435 
5 X37 4664 
6 X76 34 
7 X57 467 
8 X48 547 
相關問題