我是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'])