是否有 Python 库可以根据 Col A 对 Col B 的值进行分组,并在一行中显示一组的所有值?

Is there a Python library to group values of Col B based on Col A and display all values of a group in a single row?

我希望将以下数据转换为如下预期输出。 第二列的值必须根据第一列的值分组并显示在一行中。 我可以在 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

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

假设 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

您可以使用:

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