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