如何在Pandas中按相同id合并单列与其他列?如何按id为各列添加标签并实现分组?
问题解决:按id合并列并分组操作
你想要按id_text分组,把同一组的id_word用逗号拼接、word用斜杠拼接对吧?看你给出的示例数据和期望结果,用pandas的分组聚合功能就能轻松实现,比你现在写的循环方法高效太多了,我来帮你调整下代码:
实现步骤
首先确保你已经安装了pandas(如果没有的话先运行pip install pandas),然后按下面的代码来:
import pandas as pd # 第一步:读取你的原始CSV数据 df = pd.read_csv('你的原始文件路径.csv') # 第二步:按id_text分组并聚合列 result_df = df.groupby('id_text').agg( id_word=('id_word', lambda x: ','.join(map(str, x))), # 把同一组的id_word转成字符串后用逗号拼接 word=('word', lambda x: '/'.join(x)) # 把同一组的word用斜杠拼接 ).reset_index() # 把分组后的索引转为普通列,恢复你想要的表格结构 # 第三步:把结果保存到新的CSV文件 result_df.to_csv('你的输出文件路径.csv', index=False)
代码解释
groupby('id_text'):这一步就是核心的分组操作,把所有id_text相同的行归为一组agg():全称aggregate,用来对每个分组的指定列执行自定义聚合逻辑:- 对于
id_word,因为它是数字类型,所以先用map(str, x)把每个元素转成字符串,再用','.join()拼接 - 对于
word,本身就是字符串类型,直接用'/'.join()拼接即可
- 对于
reset_index():分组后id_text会变成DataFrame的索引,用这个方法把它变回普通列,让结果结构和你期望的完全一致
说说你原有代码的问题
你原来的循环逻辑存在几个关键问题:
if i==i-1这个条件永远不成立,i不可能等于i-1,所以里面的代码根本不会执行- 你是逐行调用
columns函数,每次只传入单条数据,函数无法获取同一分组的其他行数据,自然没法完成拼接 - 列表
l的append用法错误,append只能接收一个参数,你写l.append(text_id,word_id)会直接报错
内容的提问来源于stack exchange,提问作者d12
相关产品推荐
相关产品推荐

