Группировать и сводить списки

У меня есть фреймворк pandas со следующей формой:

import pandas as pd
p = pd.DataFrame({"int" : [1,     1,     1,     1,     2,      2],
                  "cod" : [[1,1], [2,2], [1,2], [3,9], [2,2], [2,2]]})

Я хочу сгруппировать по int, что дает мне несколько списков. Затем я хочу сгладить эти списки, так что в конечном итоге я получаю фрейм данных, который имеет такую ​​форму:

p = pd.DataFrame({"int" :  [1,                2],
                  "cod" : [[1,1,2,2,1,2,3,9], [2,2,2,2]]})

Вот что у меня есть на данный момент:

p.groupby("int", as_index=False)["cod"]

Я застрял в том, как сгладить, когда я сгруппировал по int

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
749
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте sum:

df = p.groupby("int", as_index=False)["cod"].sum()

Или list comprehension:

df = p.groupby("int")["cod"].apply(lambda x: [z for y in x for z in y]).reset_index()

df = p.groupby("int")["cod"].apply(lambda x: np.concatenate(x.values).tolist()).reset_index()

Для производительности, если большой список должен быть самым быстрым:

from itertools import chain

df = p.groupby("int")["cod"].apply(lambda x: list(chain.from_iterable(x))).reset_index()

Узнайте больше о списки сглаживания.


print (df)
   int                       cod
0    1  [1, 1, 2, 2, 1, 2, 3, 9]
1    2              [2, 2, 2, 2]

@jezrael Какой самый быстрый?

N08 08.01.2019 10:47

@ N08 - надеюсь последний, но лучший тест с реальными данными. sum Думаю не шустрый.

jezrael 08.01.2019 10:49

Здорово. Спасибо за sum. (+1)

meW 08.01.2019 10:55

@meW - Спасибо.

jezrael 08.01.2019 10:55

Отличный ответ! Спасибо за ссылки на моноиды и уплощение списка (+1)

Rodwan Bakkar 08.01.2019 12:14

Другие вопросы по теме

Как я могу объединить 2 фрейма данных на основе списка кортежей, где каждый кортеж содержит соответствующий ключ от каждого фрейма данных?
Py2exe постоянно терпит неудачу при импорте панд
Использование списка или словаря строк для создания нового столбца на основе существующего столбца во фрейме данных
Проанализировать несколько таблиц в один csv с помощью python
Как я могу построить диаграмму рассеяния и построить линию прогноза для двух функций в Python?
Редактировать индекс даты по условию, проверяя предыдущую запись в фрейме данных
Создайте новый текстовый файл с информацией о размере выходных и входных файлов отдельно для каждого файла
Как мне сгруппировать набор данных в несколько столбцов на пандах
Drop Rows В пандах осталось только первое значение
Лямбда-функция для масштабирования столбца в фрейме данных pandas возвращает: «объект 'float' не имеет атрибута 'min'»