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)
你的第一个解决方案几乎成功了:
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)
这给出了相同的结果,但是以完全矢量化的方式。
| 归档时间: |
|
| 查看次数: |
5518 次 |
| 最近记录: |