Учитывая следующие данные, я хочу сгруппировать и объединить два столбца в один, содержащий словарь. Один столбец предоставляет ключи, а значения берутся из другого столбца, который сначала объединяется в список.
import polars as pl
df = pl.DataFrame(
{
"names": ["foo", "ham", "spam", "cheese", "egg", "foo"],
"dates": ["1", "1", "2", "3", "3", "4"],
"groups": ["A", "A", "B", "B", "B", "C"],
}
)
Вот что я пытаюсь сделать:
groups combined
0 A {'1': ['foo', 'ham']}
1 B {'2': ['spam'], '3': ['cheese', 'egg']}
2 C {'4': ['foo']}
В pandas я могу сделать это с помощью двух операторов groupby, в pyspark — с помощью набора операций вокруг «map_from_entries», но, несмотря на различные попытки, я не нашел способа в полярах.
(
df.group_by("groups", "dates").all()
.to_pandas()
.groupby(["groups"])
.apply(lambda x: dict(zip(x["dates"], x["names"])))
.reset_index(name="combined")
)
Хотя это работает, это определенно неправильно.
В качестве альтернативы, вдохновленный этим постом, я попробовал ряд вариантов, подобных следующему, включая, среди прочего, преобразование dict в строки json.
df.group_by("groups").agg(
pl.map_groups(exprs=["dates", "names"], function=build_dict).alias("combined")
)
Подробнее здесь: https://stackoverflow.com/questions/706 ... -in-polars
Groupby объединяет два столбца в словарь в Polars ⇐ Python
Программы на Python
-
Anonymous
1765972355
Anonymous
Учитывая следующие данные, я хочу сгруппировать и объединить два столбца в один, содержащий словарь. Один столбец предоставляет ключи, а значения берутся из другого столбца, который сначала объединяется в список.
import polars as pl
df = pl.DataFrame(
{
"names": ["foo", "ham", "spam", "cheese", "egg", "foo"],
"dates": ["1", "1", "2", "3", "3", "4"],
"groups": ["A", "A", "B", "B", "B", "C"],
}
)
Вот что я пытаюсь сделать:
groups combined
0 A {'1': ['foo', 'ham']}
1 B {'2': ['spam'], '3': ['cheese', 'egg']}
2 C {'4': ['foo']}
В pandas я могу сделать это с помощью двух операторов groupby, в pyspark — с помощью набора операций вокруг «map_from_entries», но, несмотря на различные попытки, я не нашел способа в полярах.
(
df.group_by("groups", "dates").all()
.to_pandas()
.groupby(["groups"])
.apply(lambda x: dict(zip(x["dates"], x["names"])))
.reset_index(name="combined")
)
Хотя это работает, это определенно неправильно.
В качестве альтернативы, вдохновленный этим постом, я попробовал ряд вариантов, подобных следующему, включая, среди прочего, преобразование dict в строки json.
df.group_by("groups").agg(
pl.map_groups(exprs=["dates", "names"], function=build_dict).alias("combined")
)
Подробнее здесь: [url]https://stackoverflow.com/questions/70626081/groupby-aggregate-two-columns-into-a-dictionary-in-polars[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия