繁体   English   中英

如何使用DataFrame执行对帐?

[英]How to perform reconciliation using DataFrame?

假设我有一个每周获取的DataFrame,并且想更新一个基于每周报告进行更新的跟踪器,例如:

这是我收到的每周报告:

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

我有一个用于主要指标跟踪器的DataFrame,需要根据每周报告进行更新:

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

我想从DataFrame 1中获取数字并将其放入DataFrame 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的同时搜索第二个DataFrame,但是我将如何设置它呢?

谢谢!

如果订单不是问题,那么

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添加。

您可以使用map和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

你可以这样

where 
df -> first dataframe
df1 -> second dataframe

码:

df.loc[df.ID.isin(df1.ID), ['Cost']] = df1[['Cost']]
print df

参考:

根据另一个数据框替换列值

使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM