首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用DataFrame进行对账?

如何使用DataFrame进行对账?
EN

Stack Overflow用户
提问于 2017-08-24 02:11:28
回答 4查看 2.2K关注 0票数 0

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

这是我收到的每周报告:

代码语言:javascript
复制
ID   Cost
X12  500
X54  100
X52  150
X45  200
X32  435

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

代码语言:javascript
复制
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中,结果是:

代码语言:javascript
复制
ID   Cost
X12  500
X54  100
X52  150
X45  200
X37  4664    
X76  34
X57  467
X56  23465
X48  547
X32  435

我该如何执行这样的功能,从一个DataFrame到另一个。我假设我们使用一个for循环,在迭代第一个DataFrame的同时搜索第二个循环,但是我该如何设置它呢?

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2017-08-24 02:16:03

如果顺序不是问题,那么

代码语言:javascript
复制
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添加。

票数 1
EN

Stack Overflow用户

发布于 2017-08-24 02:39:51

您可以使用map和combine_first

代码语言:javascript
复制
df2['Cost'] = df2['ID'].map(df1.set_index('ID')['Cost']).combine_first(df2['Cost'])

你会得到

代码语言:javascript
复制
    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
票数 1
EN

Stack Overflow用户

发布于 2017-08-24 02:16:08

你可以这样做。

代码语言:javascript
复制
where 
df -> first dataframe
df1 -> second dataframe

代码:

代码语言:javascript
复制
df.loc[df.ID.isin(df1.ID), ['Cost']] = df1[['Cost']]
print df

参考:

Replace column values based on another dataframe

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45846720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档