Рабочие дни для каждого месяца в списке python - PullRequest
2 голосов
/ 28 мая 2020

python newb ie здесь. Я пытаюсь создать df, где 1 столбец - это месяц «ГГГГ-ММ», который я создал в приведенном ниже слове (советы по созданию этого с использованием кода будут оценены). Я застрял, пытаясь заполнить столбец будних дней с помощью month_list.

import pandas as pd
df = pd.DataFrame({'month_list':['2019-01', '2019-02', '2019-03', '2019-04']})
df['weekdays'] = ''

Я пробовал этот код, но он работает правильно только для первой строки. (я понимаю, почему это так, я просто не знаю, как правильно заполнить каждую строку)

df.weekdays = np.busday_count(month_list[0], month_list[0+1])
df

Ответы [ 2 ]

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

Преобразуйте значения в datetime и в строки на Series.dt.strftime, затем добавьте один месяц и перейдите к np.busday_count:

df = pd.DataFrame({'month_list':['2019-01', '2019-02', '2019-03', '2019-04']})

month_list = pd.to_datetime(df['month_list'])
a = month_list.dt.strftime('%Y-%m-%d')
b = (month_list + pd.offsets.DateOffset(months=1)).dt.strftime('%Y-%m-%d')

df['weekdays'] = np.busday_count(a, b)

print (df)
  month_list  weekdays
0    2019-01        23
1    2019-02        20
2    2019-03        21
3    2019-04        22

Только numpy решение:

month_list = pd.to_datetime(df['month_list'])

a = month_list.to_numpy().astype('datetime64[M]')
b = a + np.array([1], dtype='timedelta64[M]') 

df['weekdays'] = np.busday_count(a, b)
print (df)
  month_list  weekdays
0    2019-01        23
1    2019-02        20
2    2019-03        21
3    2019-04        22
2 голосов
/ 28 мая 2020
from pandas.tseries.offsets import MonthEnd
df = pd.DataFrame({'month_list': pd.date_range('2019-01', '2019-12', freq='MS')})

df['weekdays'] = np.busday_count(df.month_list.values.astype('datetime64[D]'), (df.month_list + MonthEnd(0)).values.astype('datetime64[D]')) + 1

Результат:

   month_list  weekdays
0  2019-01-01        23
1  2019-02-01        20
2  2019-03-01        22
3  2019-04-01        22
4  2019-05-01        23
5  2019-06-01        21
6  2019-07-01        23
7  2019-08-01        23
8  2019-09-01        21
9  2019-10-01        23
10 2019-11-01        22
11 2019-12-01        22
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...