排序赛事小组

问题描述 投票:0回答:1

我正在尝试为团队竞赛排名。他们将分三个阶段参加比赛。他们在每个阶段都有总分和持续时间。示例数据如下:

sample image of data

如果我不必比较时间,那么python的“max()”函数可以工作。

data["max"] = data[["stage1","stage2","stage3"]].max(axis=1)

我使用pandas库的“sort_values”方法对它们进行排序。为了对球队进行排名,我必须在3个阶段中找到最佳成绩。如果我不看时间,我可以通过在max方法中插入点来找到最佳分数,但如果分数相等,我应该将它们与最佳时间进行比较。为了能够获得最好的分数和时间来获得足够的分数。

对于创建数据:

import pandas as pd
import numpy as np
import random

data = pd.DataFrame()

puanlar=[]
for sayi in np.ones(100):
    puanlar.append(sayi*random.randrange(1,100))
puanlar2 = []
for sayi in np.ones(100):
    puanlar2.append(sayi*random.randrange(1,100))
puanlar3 = []
for sayi in np.ones(100):
    puanlar3.append(sayi*random.randrange(1,100))
data["stage1"] = puanlar
data["stage2"] = puanlar2
data["stage3"] = puanlar3

dakika=[]
saniye = []
salise = []
for sayi in np.ones(100):
    dakika.append(random.randrange(1,4))
    saniye.append(random.randrange(1,60))
    salise.append(random.randrange(1,60))

data["stage1_minute"] = dakika
data["stage1_second"] = saniye
data["stage1_millisecond"] = salise
dakika=[]
saniye = []
salise = []
for sayi in np.ones(100):
    dakika.append(random.randrange(1,4))
    saniye.append(random.randrange(1,60))
    salise.append(random.randrange(1,60))

data["stage2_minute"] = dakika
data["stage2_second"] = saniye
data["stage2_millisecond"] = salise
dakika=[]
saniye = []
salise = []
for sayi in np.ones(100):
    dakika.append(random.randrange(1,4))
    saniye.append(random.randrange(1,60))
    salise.append(random.randrange(1,60))

data["stage3_minute"] = dakika
data["stage3_second"] = saniye
data["stage3_millisecond"] = salise
data["max"] = data[["stage1","stage2","stage3"]].max(axis=1)
data.sort_values(['max'], ascending=False,inplace=True)
python pandas
1个回答
0
投票

我会创建一些相应列的组合并找到max:

np.random.seed(2019)
data_len = 1000
data = pd.DataFrame({'stage1': np.random.randint(1,10, data_len),
                     'stage2': np.random.randint(1,10, data_len),
                     'stage3': np.random.randint(1,10, data_len),
                     'stage1_min': np.random.uniform(1,4, data_len),
                     'stage1_sec': np.random.uniform(1,60, data_len),
                     'stage1_mil': np.random.uniform(1,60, data_len),
                     'stage2_min': np.random.uniform(1,4, data_len),
                     'stage2_sec': np.random.uniform(1,60, data_len),
                     'stage2_mil': np.random.uniform(1,60, data_len),
                     'stage3_min': np.random.uniform(1,4, data_len),
                     'stage3_sec': np.random.uniform(1,60, data_len),
                     'stage3_mil': np.random.uniform(1,60, data_len)})

# combination
for i in range(1,4):
    prefix = f'stage{i}'
    data[prefix+'new'] = [(stage, -m,-s, -ms) for stage, m, s, ms in zip(data[prefix],
                                                                       data[prefix+'_min'],
                                                                       data[prefix+'_sec'],
                                                                       data[prefix+'_mil'])]

data['max'] = data[[f'stage{i}new' for i in range(1,4)]].max(axis=1)

你也可以使用idxmax()作为最大行的索引。

© www.soinside.com 2019 - 2024. All rights reserved.