Pandas Groupby 与 Group Concat 用于整数值

min*_*bro 4 python-3.x pandas pandas-groupby

我的 pandas 数据框看起来像这样,我希望按键对其进行分组,并连接 id 的逗号分隔并创建一个新的数据框。现在的问题是 id 列是整数。

df:
          key      id
    0   abc     5073138
    1   abcd    5025923
    2   abc     7453197
    3   abcd    5032121
    4   abcd    5032121
    5   abc     5032121


new df:

         key       id
     0  abc     5073138,7453197,5032121
     1  abcd    5025923,5096021,5032121
Run Code Online (Sandbox Code Playgroud)

我尝试将 group by 与 apply 和aggregate 一起使用,但没有成功

df.groupby('key').apply(lambda x: ','.join(x.id))

df.groupby('key').agg({'id' : lambda x: ', '.join(str(x))})
Run Code Online (Sandbox Code Playgroud)

Joh*_*nck 5

你的第一个解决方案几乎成功了:

df.groupby('key').id.apply(lambda x: ','.join(map(str, x)))
Run Code Online (Sandbox Code Playgroud)

如果提前将id列转换为str,则更简单:

df.id = df.id.astype(str)
df.groupby('key').id.apply(','.join)
Run Code Online (Sandbox Code Playgroud)

虽然我个人不喜欢 apply,但如果没有它,你可能会获得更好的性能:

df.id = df.id.astype(str)
df.id += ',' # add trailing commas
df.groupby('key').id.sum().str[:-1] # sum of strs is concatenation
Run Code Online (Sandbox Code Playgroud)

这给出了相同的结果,但是以完全矢量化的方式。