确定新列和循环中的最大值



我是Python初学者,在尝试解决问题时遇到了一些麻烦。我可以得到这个点。我要做的是从这里创建top_team列并存储一个1如果它们有最高的score。每个其他团队将被分配一个0,我也希望能够循环通过这个x的次数,并存储所有以前的结果/总结。

import pandas as pd

data = {'team': ['ATL', 'ATL', 'BOS', 'BOS', 'NYY', 'NYY'], 'player': ['A', 'B', 'C', 'D', 'E', 'F']}
data = pd.DataFrame(data)

import scipy.stats as stats

a, b = 0, 9999
mu = 5
sigma = 1
dist = stats.truncnorm((a - mu) / sigma, (b - mu) / sigma, loc=mu, scale=sigma)

data['score'] = dist.rvs(6).round(2)

grouped = data.groupby("team", as_index=True)["score"].sum()
grouped = pd.DataFrame(grouped)
grouped = grouped.reset_index(level=0)

print(grouped)

上面的代码产生的结果类似于:

team  score
0  ATL  10.73
1  BOS  12.20
2  NYY   9.75

在本例中,BOS将是top_team,并在新列中被赋值为1

我希望能够将其转换为一个函数并运行此x = 10次,并最终得到类似于下面的结果。显然,结果将取决于随机数的生成。

team  top_team
0   ATL    4
1   BOS    1
2   NYY    5     

在这种特殊情况下,保存和更新最佳团队信息的最简单方法之一是使用dict()

我将用下面的方法解决它:

import scipy.stats as stats
def get_top_team(data):

data = data.copy()
a, b = 0, 9999
mu = 5
sigma = 1
dist = stats.truncnorm((a - mu) / sigma, (b - mu) / sigma, loc=mu, scale=sigma)
data['score'] = dist.rvs(6).round(2)

grouped = data.groupby("team", as_index=True)["score"].sum()
grouped = pd.DataFrame(grouped)
grouped = grouped.reset_index(level=0)

return grouped.loc[grouped.score.idxmax, 'team']

res = {}
for i in range(10):
best_team = get_top_team(data)
res[best_team] = res.get(best_team, 0) + 1

如果你需要得到一个结果作为一个DataFrame:

df = pd.DataFrame(res.items(), columns = ['team', 'top_team'])

相关内容

  • 没有找到相关文章

最新更新