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

使用pandas GroupBy按多列聚合字符串列的实现方法

Solution

你只需要把分组键改成包含vid和sente的列表,同时明确指定要聚合的列(避免对分组键本身做操作),就能得到想要的结果。

完整代码示例

import pandas as pd

# 先构造你的原始DataFrame(如果已经有了可以跳过这步)
df = pd.DataFrame({
    'vid': [1,2,3,3,1,1,1,2,3],
    'pos': ['a','b','b','a','d','a','a','b','a'],
    'value': ['A','B','A','A','B','C','D','A','A'],
    'sente': [21,21,21,21,22,22,22,22,22]
})

# 核心操作:按vid+sente分组,对pos和value列做空格连接
df2 = df.groupby(['vid', 'sente']).agg({
    'pos': lambda x: ' '.join(x),
    'value': lambda x: ' '.join(x)
}).reset_index()

# 调整列顺序和你的目标结果一致
df2 = df2[['vid', 'pos', 'value', 'sente']]

print(df2)

输出结果

vid    pos    value  sente
0    1      a        A     21
1    1  d a a  B C D     22
2    2      b        B     21
3    2      b        A     22
4    3    b a      A A     21
5    3      a        A     22

关键说明

  1. 分组键改为列表:groupby(['vid', 'sente'])会同时按照这两列的组合值进行分组,确保只有sente和vid都相同的行才会被合并。
  2. 指定聚合列:在agg中传入字典,明确告诉Pandas哪些列需要执行join操作,这样分组键(vid和sente)会被保留,不会被修改。
  3. 重置索引:reset_index()把分组键从索引变回普通列,恢复你想要的DataFrame结构。

你之前的代码只按sente分组,而且没有指定聚合列,会对所有列执行join,这显然不符合需求。调整后就完美匹配你的目标结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:04:48