Python 如何优化数据帧以使相同的输出不';是否每次都使用日志打印?

Python 如何优化数据帧以使相同的输出不';是否每次都使用日志打印?,python,pandas,dataframe,logging,Python,Pandas,Dataframe,Logging,我有一个python程序,它可以打印从各个收受赌注者那里刮来的赔率差异。这是通过将赔率附加到数据帧来实现的。我想使用一个记录数据帧输出的日志,每次我运行程序时,这样程序就不会打印重复的差异。日志将记录数据帧的“Horse”列。当程序打印数据帧时,它会参考日志,查看“Horse”列中是否有重复的名称 以下是数据帧输出的示例: Race Horse Bookmaker Odds AvgOdds 13 Mackay R1

我有一个python程序,它可以打印从各个收受赌注者那里刮来的赔率差异。这是通过将赔率附加到数据帧来实现的。我想使用一个记录数据帧输出的日志,每次我运行程序时,这样程序就不会打印重复的差异。日志将记录数据帧的“Horse”列。当程序打印数据帧时,它会参考日志,查看“Horse”列中是否有重复的名称

以下是数据帧输出的示例:

            Race             Horse      Bookmaker   Odds  AvgOdds
13     Mackay R1        Which Lily  SportsBetting   2.45     2.04
15     Mackay R1        Which Lily         Bet365   2.40     2.04
17     Mackay R1  Molongle Drifter           Ubet   9.00     7.26
18     Mackay R1  Molongle Drifter        BetEasy   8.50     7.26
19     Mackay R1  Molongle Drifter           Neds   8.50     7.26
...          ...               ...            ...    ...      ...
1545  Mackay R10        Cold Power  SportsBetting   8.10     6.39
1547  Mackay R10        Cold Power         Bet365   8.00     6.39
1548  Mackay R10   All Star Rocket           Ubet   7.20     2.98
1560  Mackay R10           Dawlish      Sportsbet  14.00    11.65
1561  Mackay R10           Dawlish  SportsBetting  15.20    11.65
以下是我的代码中与数据帧相关的部分:

cols1 = ['Race', 'Horse', 'Bookmaker', 'Odds']
df1 = pd.DataFrame(data=data, columns=cols1)
cols2 = ['Race', 'Horse', 'Bookmaker', 'AvgOdds']
df2 = pd.DataFrame(data=data, columns=cols2)
df3 = df2.groupby(by='Horse', sort=False).mean()
df3 = df3.reset_index()
df4 = round(df3,2)
dfmerge = pd.merge(df1,df4,on='Horse',how='inner')
dfmerge2 = dfmerge[dfmerge['Odds']>dfmerge['AvgOdds']*1.15]
dfmerge3 = dfmerge2['Horse']

我建议您扩展初始数据框,以包括以前报告的事件,这些事件会随报告更新

然后,当您向数据集中添加更多行时,您可以重新运行程序,而不会看到以前报告的数据

因此,给定这些数据(请注意额外的列,您最初必须将其设置为
'N'
):

使用此代码:

#以前。。。
基本数据=局部数据帧(…)
#从给出的示例重构代码
cols_raw=[“比赛”、“赛马”、“收受赌注者”、“赔率”]
原始数据=基本数据[cols\U raw]
cols_mean=[‘比赛’、‘马’、‘赔率’]
平均数据=(
基本数据[列平均值]
#我想这应该是比赛和赛马的结果。。。
.groupby(by=['Race','Horse',],sort=False)
.mean()
.reset_index()
.rename(列={'Lobbits':'AvgOdds'})
)
平均值数据=四舍五入(平均值数据)
report=pd.merge(原始数据,平均数据,on=['Race','Horse'],how='inner')
报告=(
报告[report['Locks']>report['AvgOdds']*1.15]
[马]
)
#过滤掉所有已报告的马:
预报告的马匹=基本马匹数据[基本马匹数据['reported']=='Y']['Horse']]。唯一()
报告=报告[~报告['Horse'].isin(预先报告的马)]
#然后在下次运行代码时更新报告的列
报告的_马=预报告的_马|集(报告['Horse'].unique())
base_data.loc[base_data['Horse'].isin(已报告的马),'reported']='Y'
然后,可以将新数据附加到基本数据帧,并将
Reported
设置为
'N'
,然后重新运行报告,而不会看到重复的异常概率报告

例如,如果您报告了马“Dawlish”,那么您更新的基本数据帧现在应该如下所示:

            Race             Horse      Bookmaker   Odds  Reported
13     Mackay R1        Which Lily  SportsBetting   2.45         N
15     Mackay R1        Which Lily         Bet365   2.40         N
17     Mackay R1  Molongle Drifter           Ubet   9.00         N
18     Mackay R1  Molongle Drifter        BetEasy   8.50         N
19     Mackay R1  Molongle Drifter           Neds   8.50         N
...          ...               ...            ...    ...       ...
1545  Mackay R10        Cold Power  SportsBetting   8.10         N
1547  Mackay R10        Cold Power         Bet365   8.00         N
1548  Mackay R10   All Star Rocket           Ubet   7.20         N
1560  Mackay R10           Dawlish      Sportsbet  14.00         Y
1561  Mackay R10           Dawlish  SportsBetting  27.20         Y

我建议您扩展初始数据框,以包括以前报告的事件,这些事件会随报告更新

然后,当您向数据集中添加更多行时,您可以重新运行程序,而不会看到以前报告的数据

因此,给定这些数据(请注意额外的列,您最初必须将其设置为
'N'
):

使用此代码:

#以前。。。
基本数据=局部数据帧(…)
#从给出的示例重构代码
cols_raw=[“比赛”、“赛马”、“收受赌注者”、“赔率”]
原始数据=基本数据[cols\U raw]
cols_mean=[‘比赛’、‘马’、‘赔率’]
平均数据=(
基本数据[列平均值]
#我想这应该是比赛和赛马的结果。。。
.groupby(by=['Race','Horse',],sort=False)
.mean()
.reset_index()
.rename(列={'Lobbits':'AvgOdds'})
)
平均值数据=四舍五入(平均值数据)
report=pd.merge(原始数据,平均数据,on=['Race','Horse'],how='inner')
报告=(
报告[report['Locks']>report['AvgOdds']*1.15]
[马]
)
#过滤掉所有已报告的马:
预报告的马匹=基本马匹数据[基本马匹数据['reported']=='Y']['Horse']]。唯一()
报告=报告[~报告['Horse'].isin(预先报告的马)]
#然后在下次运行代码时更新报告的列
报告的_马=预报告的_马|集(报告['Horse'].unique())
base_data.loc[base_data['Horse'].isin(已报告的马),'reported']='Y'
然后,可以将新数据附加到基本数据帧,并将
Reported
设置为
'N'
,然后重新运行报告,而不会看到重复的异常概率报告

例如,如果您报告了马“Dawlish”,那么您更新的基本数据帧现在应该如下所示:

            Race             Horse      Bookmaker   Odds  Reported
13     Mackay R1        Which Lily  SportsBetting   2.45         N
15     Mackay R1        Which Lily         Bet365   2.40         N
17     Mackay R1  Molongle Drifter           Ubet   9.00         N
18     Mackay R1  Molongle Drifter        BetEasy   8.50         N
19     Mackay R1  Molongle Drifter           Neds   8.50         N
...          ...               ...            ...    ...       ...
1545  Mackay R10        Cold Power  SportsBetting   8.10         N
1547  Mackay R10        Cold Power         Bet365   8.00         N
1548  Mackay R10   All Star Rocket           Ubet   7.20         N
1560  Mackay R10           Dawlish      Sportsbet  14.00         Y
1561  Mackay R10           Dawlish  SportsBetting  27.20         Y

您可以添加样本数据的预期输出吗?只需指定的“Horse”列,以便在您的问题中使用类似的
dfmerge2['Horse']
即可。您可以添加样本数据的预期输出吗?只需指定的“Horse”列,以便在您的问题中使用类似的
dfmerge2['Horse']
即可。