假设我有一个每周获取的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到另一个。我假设我们使用一个for循环,在迭代第一个DataFrame的同时搜索第二个循环,但是我该如何设置它呢?
谢谢!
发布于 2017-08-24 02:16:03
如果顺序不是问题,那么
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添加。
发布于 2017-08-24 02:39:51
您可以使用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发布于 2017-08-24 02:16:08
你可以这样做。
where
df -> first dataframe
df1 -> second dataframe代码:
df.loc[df.ID.isin(df1.ID), ['Cost']] = df1[['Cost']]
print df参考:
https://stackoverflow.com/questions/45846720
复制相似问题