У меня есть фреймворк 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






Используйте 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]
@ N08 - надеюсь последний, но лучший тест с реальными данными. sum Думаю не шустрый.
Здорово. Спасибо за sum. (+1)
@meW - Спасибо.
Отличный ответ! Спасибо за ссылки на моноиды и уплощение списка (+1)
@jezrael Какой самый быстрый?