Панды - объединить строки, содержащие списки - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу объединить строки (вид группировки), а также объединить данные их столбцов, которые в моем случае состоят из списка.

Например, мои данные выглядят так:

Col1 Col2
a    [1,2,3]
a    [3,4,5]
b    [1,2,3,4,20]
b    [3,80,4,5]

И полученный фрейм данных будет:

Col1 Col2
a    [1,2,3,4,5]
b    [1,2,3,4,20,80,5]

1 Ответ

0 голосов
/ 10 февраля 2019

Вы можете использовать groupby

df = pd.DataFrame({'col1': ['a','a','b','b'], 'col2': [[1,2,3], [3,4,5],[1,2,3,4,20], [3,80,4,5]]})
print(df.groupby('col1').sum())

Вывод:

                               col2
col1                               
a                [1, 2, 3, 3, 4, 5]
b     [1, 2, 3, 4, 20, 3, 80, 4, 5]

Если требуется рассмотреть повторяющееся значение только один раз, тогда оно можетсделать следующим образом:
1) Используя Set ()

print(df.groupby('col1').sum()['col2'].apply(lambda x: list(set(x))).reset_index())

Вывод:

  col1                     col2
0    a          [1, 2, 3, 4, 5]
1    b  [1, 2, 3, 4, 5, 80, 20]

2) Используяdict.fromkeys (): Это поможет сохранить порядок элементов в списке:

print(df.groupby('col1').sum()['col2'].apply(lambda x: list(dict.fromkeys(x))).reset_index())

Вывод:

  col1                     col2
0    a          [1, 2, 3, 4, 5]
1    b  [1, 2, 3, 4, 20, 80, 5]
...