У меня есть огромный Dask Dataframe, похожий на этот
|Ind| C1 | C2 |....| Cn |
|-----------------------|
| 1 |val1| AE |....|time|
|-----------------------|
| 2 |val2| FB |....|time|
|-----------------------|
|...|....| .. |....| ...|
|-----------------------|
|n-1|valx| ZK |....|time|
| n |valn| QK |....|time|
, и я хочу перераспределить его на основе уникальных значений столбца C2 и сопоставить функцию каждому разделу.
Всначала я установил C2 в качестве индекса:
df = dd.readcsv(...)
df = df.set_index(df.C2)
Теперь я хочу перераспределить недавно проиндексированный фрейм данных и отобразить функцию для каждого раздела.Мой текущий подход выглядит следующим образом:
unique_c2 = df.index.unique().compute()
df = df.repartition(division=list(unique_c2))
# list(unique_c2) looks like this: ['AE', 'FB', ..., 'ZK', 'QK']
df.map_partitions(lambda x: my_func(x), meta=df)
Мое желаемое разбиение должно выглядеть следующим образом:
|Ind | C1 | C2 |....| Cn |
|------------------------|
| AE |val1| AE |....|time|
|------------------------|
| AE |val2| AE |....|time|
|------------------------|
|....|....| .. |....| ...|
|------------------------|
| AE |valn| AE |....|time|
...
|Ind | C1 | C2 |....| Cn |
|------------------------|
| ZK |val1| ZK |....|time|
|------------------------|
| ZK |val2| ZK |....|time|
|------------------------|
|....|....| .. |....| ...|
|------------------------|
| ZK |valn| ZK |....|time|
|Ind | C1 | C2 |....| Cn |
|------------------------|
| QK |val1| QK |....|time|
|------------------------|
| QK |val2| QK |....|time|
|------------------------|
|....|....| .. |....| ...|
|------------------------|
| QK |valn| QK |....|time|
Но функция перераспределения «объединяет» мои последние два индекса, поэтому мой последний раздел выглядиткак это:
|Ind | C1 | C2 |....| Cn |
|------------------------|
| ZK |val1| ZK |....|time|
|------------------------|
| ZK |val2| ZK |....|time|
|------------------------|
|....|....| .. |....| ...|
|------------------------|
| QK |valn| QK |....|time|
|------------------------|
|....|....| .. |....| ...|
|------------------------|
| QK |valn| QK |....|time|
Есть идеи, почему это происходит, или у вас есть лучшее решение для моей проблемы?Я знаю, что есть dask.groupby(...).apply(...)
.Но у моей функции отображения есть побочные эффекты, и apply(...)
всегда выполняется дважды для каждого раздела dask.