2017-08-23 21 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 
相关问题