Python — Количество групп результатов за день месяца, на которые повлияли неправильные значения сортировки

#python

Вопрос:

Я постепенно откалываю скрипт на python, который я хочу прочитать в файле csv с датами платежей, чтобы определить платежные циклы отдельных сторон, чтобы я мог предсказать будущие даты платежей.

Мой сценарий намерен в конечном итоге обеспечить:

  • подсчитайте количество вхождений в день месяца
  • подсчитайте количество событий за день недели
  • объедините подсчеты как дня месяца, так и дня недели и получите процент, отсортированный по наибольшему значению вверху
  • если значение дня месяца было наибольшим и в некоторых датах не использовались наиболее часто используемые даты, приходилась ли используемая дата на выходные (также будет объединяться в праздничные дни, чтобы сделать ее более точной), если верно, то добавьте эту дату также к наибольшему количеству
  • пересчитайте проценты с использованием скорректированных весов

Сейчас я только начал, так что вот мои проблемы:

  • Мне удалось получить день от даты в моем сценарии. Затем я применил сортировку, которая не работает, поэтому, когда она затем переходит к подсчету вхождений значения, она создает более одной группы для одного и того же значения, которое должно было быть отсортировано
  • Я добавил день недели, который вообще не работает — похоже, он относится к сегодняшнему дню, а не к дате, на которую я прошу его обратить внимание при определении дня

Я проработаю остальные шаги моего сценария намного позже, пока не обнаружил проблем, которые я еще не создал

данные и сценарий

У меня есть пример csv с 10 строками, представляющими платежи за 10 месяцев:

сторона, дата, дебет , кредит

Компания Netflix,22/01/2021,-$19.99 , $-
На Netflix,22/02/2021,-$19.99 , $-
На Netflix,22/03/2021,-$19.99 , $-
На Netflix,22/04/2021,-$19.99 , $-
На Netflix,24/05/2021,-$19.99 , $-
На Netflix,22/06/2021,-$19.99 , $-
На Netflix,22/07/2021,-$19.99 , $-
На Netflix,23/08/2021,-$19.99 , $-
На Netflix,22/09/2021,-$19.99 , $-
На Netflix,22/10/2021,-$19.99 , $-

python script

 import pandas as pd from datetime import datetime from itertools import groupby  df = pd.read_csv(r"C:UsersmattlOneDriveDesktopexample_netflix.csv")  # Convert to a Date format here df['NewDate']=df['date'].apply(lambda x: datetime.strptime(x, '%d/%m/%Y'))  # Extract Month and store as new column df['Month']=df['NewDate'].apply(lambda x: x.month)  # Extract Day and store as new column df['Day']=df['NewDate'].apply(lambda x: x.day)  # Extract Day of week and store as new column df['DayOfWeek']=df['NewDate'].apply(lambda x: datetime.today().weekday())  # Sort the data frame in descending dates df.sort_values('Day') print('CSV File rows') print(df)  # Count the occurrences of the day in the set st = [(key, len(list(group))) for key, group in groupby(df['Day'])]  # Result of Count print('Count Results') print(st)  

Результаты

 CSV File rows party date debit credit NewDate Month Day DayOfWeek 0 Netflix 22/01/2021 -$19.99 $- 2021-01-22 1 22 2 1 Netflix 22/02/2021 -$19.99 $- 2021-02-22 2 22 2 2 Netflix 22/03/2021 -$19.99 $- 2021-03-22 3 22 2 3 Netflix 22/04/2021 -$19.99 $- 2021-04-22 4 22 2 4 Netflix 24/05/2021 -$19.99 $- 2021-05-24 5 24 2 5 Netflix 22/06/2021 -$19.99 $- 2021-06-22 6 22 2 6 Netflix 22/07/2021 -$19.99 $- 2021-07-22 7 22 2 7 Netflix 23/08/2021 -$19.99 $- 2021-08-23 8 23 2 8 Netflix 22/09/2021 -$19.99 $- 2021-09-22 9 22 2 9 Netflix 22/10/2021 -$19.99 $- 2021-10-22 10 22 2 Count Results [(22, 4), (24, 1), (22, 2), (23, 1), (22, 2)]  

Я очень ценю вашу помощь в объяснении моих существующих проблем. Спасибо

Комментарии:

1. Вы всегда используете СЕГОДНЯШНИЙ день недели ( datetime.today().weekday() ). Вы должны использовать x.weekday() .

2. вам также не нужны все эти заявки

3. @TimRoberts У меня все получилось, df['WeekDay']=df['NewDate'].apply(lambda x: x.weekday()) спасибо

4. @JoranBeasley Я не уверен, как бы вы отформатировали это без приложения

5. Подсчет групп по-прежнему является проблемой, похоже, что если мне придется полагаться на порядок сортировки, то подсчет дней недели и дней месяца не может быть выполнен вместе из одного и того же набора данных. Это правда?