Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用DataFrame执行对账?_Python_Pandas_Dataframe - Fatal编程技术网

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。我建议的代码有效。