Найти - Пользователи
Полная версия: Подсчет количества матчей по ходу сезона с условиями
Начало » Центр помощи » Подсчет количества матчей по ходу сезона с условиями
1 2
Xelar93
Здравствуйте. Есть такая таблица исходных данных. Мне нужно посчитать сколько раз встречается Player1 в столбцах Player1 и Player2, и тоже самое для Player2 с построчным занесением этого числа в столбцы GP_1 и GP_2. но с условием за последние 60 дней от текущей строки. Без этого условия я сделал, а с ним не знаю как…Понимаю только что нужно наверно как-то смещать диапазон цикла чтобы он охватывал не всю таблицу, а только те значения которые подходят под мое условие. Буду рад если кто-то поможет. В примере показал как сделал такой расчет без каких-либо условий.

 def calculate_GP(GP_1,GP_2):
    
        diff_1=GP_1+1
        diff_2=GP_2+1
        return diff_1, diff_2
 
current_GP={}
for idx,row in df.iterrows():
    
    Player_1=row['Player1']
    Player_2=row['Player2']
    
    if Player_1 not in current_GP.keys():
        current_GP[Player_1]=0
    
    if Player_2 not in current_GP.keys():
        current_GP[Player_2]=0
        
    GP_1=current_GP[Player_1]
    GP_2=current_GP[Player_2]
    
    diff_1,diff_2=calculate_GP(GP_1,GP_2)
    
    current_GP[Player_1]=diff_1
    current_GP[Player_2]=diff_2
    
    df.loc[idx,'GP1']=GP_1
    df.loc[idx,'GP2']=GP_2
xam1816
Xelar93
Есть такая таблица исходных данных.
конвертировать таблицу в csv, выложить файл сюда

вручную написать что нужно в результате
ZerG
Что есть таблица? документ ексель или база даных?
В любом случае как сказали выше - формат таблицы и данных прикрепите
Xelar93
Код который скинул в первом сообщении добавляет два столбца GP1 и GP2 и выполняет соответствующий расчет. Я считаю сколько Player1 и Player2 сыграли матчей до текущей даты. Например значение GP1 в последней строке таблицы = 80. Это значит что игрок Rafael Nadal сыграл до этого 80 игр. А я хочу подсчитать сколько было сыграно игр, не за все время а только за прошлые 60 дней.
Xelar93
P.S Смотреть этот файл
ZerG
я на телефоне - скачал запустил не понял
(ничо конечно не делал)
Вопрос то в чем?
py.user.next
Xelar93
Прикреплённый файлы:
attachment TennisGP.csv (499,3 KБ)
Да он вообще сохранён неправильно. Даже на поля не раскладывает.
Сначала получи правильный файл.

Xelar93
Прикреплённый файлы:
attachment Tennis_2010.rar (350,0 KБ)
Этот правильно раскладывается.

Xelar93
Есть такая таблица исходных данных. Мне нужно посчитать сколько раз встречается Player1 в столбцах Player1 и Player2, и тоже самое для Player2 с построчным занесением этого числа в столбцы GP_1 и GP_2. но с условием за последние 60 дней от текущей строки. Без этого условия я сделал, а с ним не знаю как…Понимаю только что нужно наверно как-то смещать диапазон цикла чтобы он охватывал не всю таблицу, а только те значения которые подходят под мое условие.
Xelar93
Код который скинул в первом сообщении добавляет два столбца GP1 и GP2 и выполняет соответствующий расчет. Я считаю сколько Player1 и Player2 сыграли матчей до текущей даты. Например значение GP1 в последней строке таблицы = 80. Это значит что игрок Rafael Nadal сыграл до этого 80 игр. А я хочу подсчитать сколько было сыграно игр, не за все время а только за прошлые 60 дней.
Ты сначала возьми подтаблицу, и когда она у тебя будет выделена за определённый период, в ней и будешь искать.
Сегодня тебе нужен один период, завтра понадобится другой, послезавтра - третий. Поэтому код должен быть один и тот же, а вот соответствующие таблицы этому коду должен поставлять другой код - код выбора подтаблиц.
Xelar93
py.user.next
И как будет выглядеть такой код для выбора подтаблиц?
xam1816
  
import datetime
import pandas as pd
df = pd.read_csv('/home/xam/Загрузки/Tennis_2010.csv')
def count_games_player(df, player, date_start, date_end):
    """
    
    :param df: таблица
    :param player: имя игрока
    :param date_start: начальная дата откуда считать
    :param date_end: конечная дата (не входит в счет)
    :return: количество игр
    """
    def my_filter(value):
        date = datetime.datetime.strptime(value['Date'], '%m/%d/%Y').date()
        return datetime.date(*date_start) <= date < datetime.date(*date_end) \
               and (value['Player1'] == player or value['Player2'] == player)
    out_df = df[df.apply(lambda x: my_filter(x), axis=1)]
    return len(out_df)
 
if __name__ == '__main__':
    res = count_games_player(df, 'Rafael Nadal', (2010, 1, 2), (2010, 12, 31))
    print(res)
    res2 = count_games_player(df, 'Rafael Nadal', (2010, 1, 2), (2010, 3, 31))
    print(res2)

вывод
 
80
17

Process finished with exit code 0
FishHook
xam1816
скажите, а зачем по-вашему нужна вот эта конструкция?
 if __name__ == '__main__':
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB