Форум сайта python.su
Здравствуйте. Есть такая таблица исходных данных. Мне нужно посчитать сколько раз встречается 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
Отредактировано Xelar93 (Авг. 3, 2022 21:19:36)
Прикреплённый файлы:
До.png (43,3 KБ)
Офлайн
Xelar93конвертировать таблицу в csv, выложить файл сюда
Есть такая таблица исходных данных.
Офлайн
Что есть таблица? документ ексель или база даных?
В любом случае как сказали выше - формат таблицы и данных прикрепите
Офлайн
Код который скинул в первом сообщении добавляет два столбца GP1 и GP2 и выполняет соответствующий расчет. Я считаю сколько Player1 и Player2 сыграли матчей до текущей даты. Например значение GP1 в последней строке таблицы = 80. Это значит что игрок Rafael Nadal сыграл до этого 80 игр. А я хочу подсчитать сколько было сыграно игр, не за все время а только за прошлые 60 дней.
Отредактировано Xelar93 (Авг. 4, 2022 14:43:29)
Прикреплённый файлы:
TennisGP.csv (499,3 KБ)
Офлайн
P.S Смотреть этот файл
Прикреплённый файлы:
Tennis_2010.rar (350,0 KБ)
Офлайн
я на телефоне - скачал запустил не понял
(ничо конечно не делал)
Вопрос то в чем?
Офлайн
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 дней.
Отредактировано py.user.next (Авг. 4, 2022 23:30:24)
Офлайн
py.user.nextИ как будет выглядеть такой код для выбора подтаблиц?
Офлайн
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
Офлайн
xam1816
скажите, а зачем по-вашему нужна вот эта конструкция?
if __name__ == '__main__':
Офлайн