#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. Подсчет групп по-прежнему является проблемой, похоже, что если мне придется полагаться на порядок сортировки, то подсчет дней недели и дней месяца не может быть выполнен вместе из одного и того же набора данных. Это правда?