как рассчитать количество рабочих дней с помощью python

#python #pandas #days #python-holidays

#python #pandas #дней #python-праздники

Вопрос:

У меня есть фрейм данных (df):

     year  month ETP
0   2021    1   49.21
1   2021    2   34.20
2   2021    3   31.27
3   2021    4   29.18
4   2021    5   33.25
5   2021    6   24.70
 

Я хотел бы добавить столбец, который дает мне количество рабочих дней для каждой строки, исключая праздничные и выходные дни (для конкретной страны, например: Франция или США)

таким образом, результат будет :

     year  month ETP     work_day
0   2021    1   49.21      20
1   2021    2   34.20      20
2   2021    3   31.27      21
3   2021    4   29.18      19
4   2021    5   33.25      20
5   2021    6   24.70      19
 

код :

 import numpy as np
import pandas as pd
days = np.busday_count( '2021-01', '2021-06' ) 
df.insert(3, "work_day", [days]) 
 

и я получил эту ошибку :

 ValueError: Length of values does not match length of index
 

Есть предложения?

Спасибо за вашу помощь

Ответ №1:

предполагая, что вы тот, кто будет вводить рабочие дни, я полагаю, вы можете сделать это следующим образом:

 data = {'year': [2020, 2020, 2021, 2023, 2022], 
        'month': [1, 2, 3, 4, 6]} 
 
df = pd.DataFrame(data)
 
df.insert(2, "work_day", [20,20,23,21,22]) 
 

Где 2 позиция нового столбца, а не просто быть в конце, work_day это имя, а список содержит значения для каждой строки.

РЕДАКТИРОВАТЬ: с помощью NumPy

 import numpy as np
import pandas as pd

days = np.busday_count( '2021-02', '2021-03' )
data = {'year': [2021], 
        'month': ['february']} 
 
df = pd.DataFrame(data)
 
df.insert(2, "work_day", [days]) 
 

с помощью кнопки busday_count вы указываете начальную и конечную даты, в которые хотите видеть рабочие дни.
результат :

    year     month  work_day
0  2021  february  20
 

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

1. @ T0ny1234 Нет, я хочу иметь код, который позволяет мне автоматически рассчитывать рабочие дни, у меня есть расписание с 2020 по 2030 год, поэтому я не могу сделать это вручную

2. Вы можете использовать NumPy, я отредактирую код в ответе, чтобы вы могли его увидеть.

3. @ T0ny1234 извините за мой поздний ответ, да, это то, что я хотел бы иметь, но когда я попробовал фрейм данных в моем примере, это действительно не работает!

4. Я добавляю ошибку и код в свой вопрос

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