Python Dataframe: получить количество дней недели в прошлом месяце? - PullRequest
0 голосов
/ 27 мая 2020

У меня df со столбцом day_name. Я пытаюсь получить количество дней недели в прошлом месяце?

Я пытаюсь получить количество дней недели, присутствующих в прошлом месяце.

Например: есть 4 Fridays и 5 Thrusdays в апреле

df

            day_name            
    0       Friday          
    1       Sunday          
    2       Thursday            
    3       Wednesday          
    4       Monday          

Согласно python за один день:

    import calendar
    year = 2020
    month = 4
    day_to_count = calendar.WEDNESDAY
    matrix = calendar.monthcalendar(year,month)
    num_days = sum(1 for x in matrix if x[day_to_count] != 0)

Как мне использовать это в фрейме данных или любых предложениях?

ожидаемый результат

            day_name     last_months_count      
    0       Friday          4
    1       Sunday          4
    2       Thursday        5    
    3       Wednesday       5   
    4       Monday          4

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

За последний месяц:

year, month = 2020, 4

start,end = f'{year}/{month}/1', f'{year}/{month+1}/1'

# we exclude the last day
# which is first day of next month
last_month = pd.date_range(start,end,freq='D')[:-1]

df['last_month_count'] = df['day_name'].map(last_month.day_name().value_counts())

Вывод:

    day_name  last_month_count
0     Friday                 4
1     Sunday                 4
2   Thursday                 5
3  Wednesday                 5
4     Monday                 4

Бонус: для программного извлечения последнего месяца:

from datetime import datetime
now = datetime.now()

year, month = now.year, now.month

# first month of the year
if month == 1:
    year, month = year-1, 12
1 голос
/ 27 мая 2020

Здесь вы go:

from datetime import date, timedelta
from calendar import day_name
import pandas as pd

today = date.today()
dt = date(today.year, today.month, 1) - timedelta(days=1)
day_to_count = {}
month = dt.month
while dt.month == month:
    key = day_name[dt.weekday()]
    day_to_count[key] = day_to_count.get(key, 0) + 1
    dt -= timedelta(days = 1)

df = pd.DataFrame({
    'day_name': ['Friday', 'Sunday', 'Thursday', 'Wednesday', 'Monday']
})

df['last_months_count'] = df['day_name'].apply(lambda day : day_to_count[day])
print(df)

Вывод:


    day_name  last_months_count
0     Friday                  4
1     Sunday                  4
2   Thursday                  5
3  Wednesday                  5
4     Monday                  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...