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