Pandas 在 groupby() 之后用逗号连接列值

Pandas concatenate column values with comma after groupby()

我有一个这样的 pandas 数据框:

Column1 Column2 Column3
a k x
a l y
b k z

我想将此数据框转换为:

Column1 Column2 Column3
a "k,l" "x,y"
b k z

我找到了类似的示例,但找不到解决我的问题的确切方法。非常感谢您的帮助!

您可能希望使用自定义函数连接利用 pandas.DataFrame.transform:

的字符串
df.groupby(['Column1']).transform(lambda val: ','.join(val))

尝试 groupby 然后 agg

df_ = (df.groupby(['Column1'])
       .agg({'Column2': lambda x: ','.join(x), 'Column3': lambda x: ','.join(x)})
       .reset_index()
)
print(df_)

  Column1 Column2 Column3
0       a     k,l     x,y
1       b       k       z

如果需要引号

df_ = (df.groupby(['Column1'])
       .agg({'Column2': lambda x: f'"{",".join(x)}"' if len(x)>1 else x,
             'Column3': lambda x: f'"{",".join(x)}"' if len(x)>1 else x})
       .reset_index()
)
  Column1 Column2 Column3
0       a   "k,l"   "x,y"
1       b       k       z

您可以使用 groupbyagg:

df.groupby(["Column1"], as_index=False).agg(lambda x: ",".join(x))

编辑 刚发现 lambda 这里甚至不需要:

df.groupby(["Column1"], as_index=False).agg(",".join)

输出:

    Column1     Column2     Column3
0   a           k,l         x,y
1   b           k           z