Эффективное обозначение праздников в столбце данныхPython

Программы на Python
Anonymous
Эффективное обозначение праздников в столбце данных

Сообщение Anonymous »

Я пытаюсь добавить столбец, в котором будет указано, является ли дата праздником или нет. Я нашел код в Интернете, но считаю, что есть более эффективный способ сделать это, возможно, используя полярный метод вместо элементов карты и лямбда-выражений.
Пример кода:
import polars as pl
import holidays

# Initialize the holidays for Chile
cl_holidays = holidays.CL()

# Sample data
data = {
"Date": ["2024-06-20 00:00:00", "2024-06-21 00:00:00", "2024-06-22 00:00:00", "2024-06-23 00:00:00", "2024-06-24 00:00:00"],
"Amount": [100, 200, 300, 400, 500],
"User_Count" : [1, 2, 3, 4, 5]
}

# Create DataFrame
df = pl.DataFrame(data)

# Add a new column 'Is_Holiday' based on the Date column
df = df.with_columns(
(pl.col("Date").map_elements(lambda x: x.split(" ")[0] in cl_holidays, return_dtype=pl.Boolean)).alias("Is_Holiday")
).with_columns(pl.col("Date").str.strptime(pl.Datetime))

df

Ожидаемый результат:
shape: (5, 4)
┌─────────────────────┬────────┬────────────┬────────────┐
│ Date ┆ Amount ┆ User_Count ┆ Is_Holiday │
│ --- ┆ --- ┆ --- ┆ --- │
│ datetime[μs] ┆ i64 ┆ i64 ┆ bool │
╞═════════════════════╪════════╪════════════╪════════════╡
│ 2024-06-20 00:00:00 ┆ 100 ┆ 1 ┆ true │
│ 2024-06-21 00:00:00 ┆ 200 ┆ 2 ┆ false │
│ 2024-06-22 00:00:00 ┆ 300 ┆ 3 ┆ false │
│ 2024-06-23 00:00:00 ┆ 400 ┆ 4 ┆ false │
│ 2024-06-24 00:00:00 ┆ 500 ┆ 5 ┆ false │
└─────────────────────┴────────┴────────────┴────────────┘


ОБНОВЛЕНИЕ: я пробовал использовать подход @ignoring_gradity, а также пробовал изменить формат даты, но все равно получаю false вместо true
UPDATE2: Если я попробуй подход @Hericks, я продолжаю ошибаться. (Я использую поляры 0.20.31)
import polars as pl
import holidays

# Initialize the holidays for Chile
cl_holidays = holidays.CL()

# Sample data
data = {
"Date": ["2024-06-20 00:00:00", "2024-06-21 00:00:00", "2024-06-22 00:00:00", "2024-06-23 00:00:00", "2024-06-24 00:00:00"],
"Amount": [100, 200, 300, 400, 500],
"User_Count" : [1, 2, 3, 4, 5]
}

# Create DataFrame
df = pl.DataFrame(data)

# Add a new column 'Is_Holiday' based on the Date column
df.with_columns(
Is_Holiday=pl.col('Date').str.to_datetime().dt.date().is_in(cl_holidays.keys())
)

Выход:
shape: (5, 4)
┌─────────────────────┬────────┬────────────┬────────────┐
│ Date ┆ Amount ┆ User_Count ┆ Is_Holiday │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 ┆ bool │
╞═════════════════════╪════════╪════════════╪════════════╡
│ 2024-06-20 00:00:00 ┆ 100 ┆ 1 ┆ false │
│ 2024-06-21 00:00:00 ┆ 200 ┆ 2 ┆ false │
│ 2024-06-22 00:00:00 ┆ 300 ┆ 3 ┆ false │
│ 2024-06-23 00:00:00 ┆ 400 ┆ 4 ┆ false │
│ 2024-06-24 00:00:00 ┆ 500 ┆ 5 ┆ false │
└─────────────────────┴────────┴────────────┴────────────┘


Подробнее здесь: https://stackoverflow.com/questions/786 ... ata-column

Вернуться в «Python»