Python 如何使用DataFrame执行对账?
假设我有一个每周获取的数据帧,并且希望更新一个根据每周报告更新的跟踪器,例如: 这是我收到的每周报告:Python 如何使用DataFrame执行对账?,python,pandas,dataframe,Python,Pandas,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 我想从Da
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
我想从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
我将如何执行这样的函数,从一个数据帧到另一个数据帧。我假设我们使用for循环并在遍历第一个数据帧的同时搜索第二个数据帧,但是如何设置呢
谢谢 如果订单不是问题,那么
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
添加。如果订单不是问题,则
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
添加。您可以这样做
where
df -> first dataframe
df1 -> second dataframe
代码:
df.loc[df.ID.isin(df1.ID), ['Cost']] = df1[['Cost']]
print df
参考资料:
df.loc[df.ID.isin(df1.ID), ['Cost']] = df1[['Cost']]
print df
你可以这样做
where
df -> first dataframe
df1 -> second dataframe
代码:
df.loc[df.ID.isin(df1.ID), ['Cost']] = df1[['Cost']]
print df
参考资料:
df.loc[df.ID.isin(df1.ID), ['Cost']] = df1[['Cost']]
print df
您可以先使用map和combine\u
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
您可以先使用map和combine_
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
使用
删除重复项
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
使用
删除重复项
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
我是否可以在保持我提供的相同顺序的同时执行此操作?此外,此操作是否可以跳过ID中的NaN值?我是否可以在保持我提供的相同顺序的同时执行此操作?此外,此操作是否可以跳过ID中的NaN值?假设我有一个具有NaN值的ID。它会跳过它吗?df1或df2中带有nan的ID?假设我们通过在df2中引入nan来测试代码,df2.loc[df2.ID='X12','Cost']=np.nan。我建议的代码是有效的。假设我有一个带有NaN值的ID。它会跳过它吗?df1或df2中带有nan的ID?假设我们通过在df2中引入nan来测试代码,df2.loc[df2.ID='X12','Cost']=np.nan。我建议的代码有效。