Существует ли библиотека Python для группировки значений столбца B на основе столбца A и отображения всех значений группы в одной строке? - PullRequest
2 голосов
/ 22 апреля 2019

Я хочу, чтобы следующие данные были преобразованы, как показано ниже ожидаемого вывода.Значения 2-го столбца должны быть сгруппированы и отображены в одной строке на основе значений в 1-м столбце.Я могу использовать свою собственную логику в Python для этого, но хотел бы знать, предоставляет ли Pandas или любая другая библиотека в Python такую ​​функциональность, чтобы упростить его.

Ввод:

1   A
1   B
1   B
2   D
3   A
1   C
4   D
2   A
1   A
3   B
4   A
2   D
2   C
4   C
4   B
4   A
3   A

ожидаемый результат:

1   A   B   B   C   A
2   D   A   D   C   
3   A   B   A       
4   D   A   C   B   A

Ответы [ 3 ]

2 голосов
/ 22 апреля 2019

Используйте, предполагая, 0 - первый столбец, а 1 - второй.если первый столбец является индексом, замените 0 на df.index

m=df.groupby(0)[1].apply(list)
print(pd.DataFrame(m.values.tolist(),index=m.index).rename_axis(None).fillna(''))

   0  1  2  3  4
1  A  B  B  C  A
2  D  A  D  C   
3  A  B  A      
4  D  A  C  B  A
2 голосов
/ 22 апреля 2019

Да pandas может сделать это:

import pandas as pd

# Create dataframe (or import it)
df = pd.DataFrame({"id": [1, 1, 1, 2, 2, 3, 1, 4], "letter" : ["A", "A", "B", "D", "A", "C", "B", "B"]})

print(df)

Результат:

    id  letter
0   1   A
1   1   A
2   1   B
3   2   D
4   2   A
5   3   C
6   1   B
7   4   B

Тогда:

df.groupby("id").sum()
print(df)

Результат:

id  letter
1   AABB
2   DA
3   C
4   B
1 голос
/ 22 апреля 2019

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

df.groupby('id').sum()['letter'].apply(lambda x: ' '.join(x))

id
1    A B B C A
2      D A D C
3        A B A
4    D A C B A
...