У меня есть переменное количество pl.DataFrame, которые имеют общие столбцы (например, символ и дату). Каждый pl.DataFrame имеет несколько дополнительных столбцов, которые не важны для реальной задачи.
Столбцы символов имеют абсолютно одинаковое содержимое (в каждом кадре данных существуют разные значения str). Столбцы даты несколько отличаются тем, что они не имеют одинаковых дат в каждом pl.DataFrame.
Фактическая задача состоит в том, чтобы найти общие даты для каждой группы (т. е. символа) и соответствующим образом отфильтровать каждый pl.DataFrame.
Вот три примера pl.DataFrame:
import polars as pl
df1 = pl.from_repr("""
┌────────┬────────────┬────────────────┐
│ symbol ┆ date ┆ some_other_col │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞════════╪════════════╪════════════════╡
│ AAPL ┆ 2023-01-01 ┆ 0 │
│ AAPL ┆ 2023-01-02 ┆ 1 │
│ AAPL ┆ 2023-01-03 ┆ 2 │
│ AAPL ┆ 2023-01-04 ┆ 3 │
│ GOOGL ┆ 2023-01-02 ┆ 4 │
│ GOOGL ┆ 2023-01-03 ┆ 5 │
│ GOOGL ┆ 2023-01-04 ┆ 6 │
└────────┴────────────┴────────────────┘
""")
df2 = pl.from_repr("""
┌────────┬────────────┬─────────────┐
│ symbol ┆ date ┆ another_col │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞════════╪════════════╪═════════════╡
│ AAPL ┆ 2023-01-02 ┆ 0 │
│ AAPL ┆ 2023-01-03 ┆ 1 │
│ AAPL ┆ 2023-01-04 ┆ 2 │
│ GOOGL ┆ 2023-01-01 ┆ 3 │
│ GOOGL ┆ 2023-01-02 ┆ 4 │
│ GOOGL ┆ 2023-01-03 ┆ 5 │
│ GOOGL ┆ 2023-01-04 ┆ 6 │
│ GOOGL ┆ 2023-01-05 ┆ 7 │
└────────┴────────────┴─────────────┘
""")
df3 = pl.from_repr("""
┌────────┬────────────┬──────────┐
│ symbol ┆ date ┆ some_col │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞════════╪════════════╪══════════╡
│ AAPL ┆ 2023-01-02 ┆ 0 │
│ AAPL ┆ 2023-01-03 ┆ 1 │
│ AAPL ┆ 2023-01-04 ┆ 2 │
│ AAPL ┆ 2023-01-05 ┆ 3 │
│ GOOGL ┆ 2023-01-03 ┆ 4 │
│ GOOGL ┆ 2023-01-04 ┆ 5 │
└────────┴────────────┴──────────┘
""")
Теперь первым шагом будет поиск общих дат для каждого символа.
AAPL: ["2023-01-02", "2023-01-03", "2023-01-04"]
GOOGL: ["2023-01-03", "2023-01-04"]
Это означает, что каждый pl.DataFrame необходимо соответствующим образом фильтровать. Ожидаемый результат выглядит следующим образом:
DataFrame 1 отфильтрован:
shape: (5, 3)
┌────────┬────────────┬────────────────┐
│ symbol ┆ date ┆ some_other_col │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞════════╪════════════╪════════════════╡
│ AAPL ┆ 2023-01-02 ┆ 1 │
│ AAPL ┆ 2023-01-03 ┆ 2 │
│ AAPL ┆ 2023-01-04 ┆ 3 │
│ GOOGL ┆ 2023-01-03 ┆ 5 │
│ GOOGL ┆ 2023-01-04 ┆ 6 │
└────────┴────────────┴────────────────┘
DataFrame 2 отфильтрован:
shape: (5, 3)
┌────────┬────────────┬─────────────┐
│ symbol ┆ date ┆ another_col │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞════════╪════════════╪═════════════╡
│ AAPL ┆ 2023-01-02 ┆ 0 │
│ AAPL ┆ 2023-01-03 ┆ 1 │
│ AAPL ┆ 2023-01-04 ┆ 2 │
│ GOOGL ┆ 2023-01-03 ┆ 5 │
│ GOOGL ┆ 2023-01-04 ┆ 6 │
└────────┴────────────┴─────────────┘
DataFrame 3 отфильтрован:
shape: (5, 3)
┌────────┬────────────┬──────────┐
│ symbol ┆ date ┆ some_col │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞════════╪════════════╪══════════╡
│ AAPL ┆ 2023-01-02 ┆ 0 │
│ AAPL ┆ 2023-01-03 ┆ 1 │
│ AAPL ┆ 2023-01-04 ┆ 2 │
│ GOOGL ┆ 2023-01-03 ┆ 4 │
│ GOOGL ┆ 2023-01-04 ┆ 5 │
└────────┴────────────┴──────────┘
Подробнее здесь: https://stackoverflow.com/questions/791 ... dataframes