You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按ID列分组并以分号拼接PTM_loc列?

问题

现有包含ID和PTM_loc列的DataFrame,数据如下:

>>> data['ID']
0        93.0-24
1       127.0-24
2       127.0-22
3       127.0-19
4       127.0-16
5    127.0-22;16
6    127.0-22;16

>>> data['PTM_loc']
0        116
1        150
2        148
3        145
4        142
5        189
6        166

想要按ID分组,将每组的PTM_loc值用分号拼接,执行以下代码时出现报错:

>>> data.groupby('ID').agg(lambda: ';'.join(x.PTM_loc)).reset_index

报错信息:

Traceback (most recent call last):
  File "/ldfssz1/SP_MSI/USER/wangyuru/spatialPro/anaconda3/lib/python3.10/site-packages/pandas/core/groupby/generic.py", line 926, in aggregate
    result = gba.agg()
  File "/ldfssz1/SP_MSI/USER/wangyuru/spatialPro/anaconda3/lib/python3.10/site-packages/pandas/core/apply.py", line 175, in agg
    return self.agg_list_like()
  File "/ldfssz1/SP_MSI/USER/wangyuru/spatialPro/anaconda3/lib/python3.10/site-packages/pandas/core/apply.py", line 438, in agg_list_like
    raise ValueError("no results")
ValueError: no results

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/ldfssz1/SP_MSI/USER/wangyuru/spatialPro/anaconda3/lib/python3.10/site-packages/pandas/core/groupby/generic.py", line 932, in aggregate
    result = self._aggregate_frame(func)
  File "/ldfssz1/SP_MSI/USER/wangyuru/spatialPro/anaconda3/lib/python3.10/site-packages/pandas/core/groupby/generic.py", line 982, in _aggregate_frame
    fres = func(data, *args, **kwargs)
TypeError: <lambda>() takes 0 positional arguments but 1 was given

期望结果:

ID            PTM_loc
0        93.0-24   116
1       127.0-24   150
2       127.0-22   148
3       127.0-19   145
4       127.0-16   142
5    127.0-22;16   189;166
解决方法

错误原因

  1. 匿名函数未定义参数:lambda: ';'.join(x.PTM_loc)没有接收分组数据的参数,而agg会自动传递分组后的序列/数据框给函数,导致参数不匹配报错。
  2. 类型不兼容:PTM_loc是数值类型,str.join()仅支持字符串序列,直接拼接会报错。
  3. 方法调用错误:reset_index是方法,需加括号reset_index()才能执行。

修正后的代码

提供两种可行实现方式:

方式一:针对目标列直接聚合

data.groupby('ID')['PTM_loc'].agg(lambda x: ';'.join(map(str, x))).reset_index()

方式二:指定列的聚合规则

data.groupby('ID').agg({'PTM_loc': lambda x: ';'.join(map(str, x))}).reset_index()

代码说明

  • 给lambda函数添加参数x,用于接收分组后的PTM_loc序列。
  • 用map(str, x)将数值类型的PTM_loc转换为字符串,满足join方法的要求。
  • 调用reset_index()将分组后的索引转为普通列,得到与预期一致的结构。

内容的提问来源于stack exchange,提问作者RRRRRRRR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:23:10