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

如何将DataFrame中连续相同标识的列值分组合并并配对?

解决方法

步骤说明

要实现连续相同类型消息的合并并配对,核心是先识别连续的同类型分组,再分别聚合后对齐配对,具体代码如下:

import pandas as pd

# 初始化原始DataFrame
df1 = pd.DataFrame({'A' : ['a', 'b', 'c', 'd', 'e', 'f', 'h', 'j', 'de', 'be'],
                   'B' : [1, 1, 2, 1, 1, 1, 2, 2, 1, 2]})

# 生成连续相同B值的分组标记:当当前行B与上一行不同时,分组号+1
df1['group'] = df1['B'].ne(df1['B'].shift()).cumsum()

# 按分组聚合,合并同组的A列内容,同时保留组类型
grouped = df1.groupby('group').agg(
    merged_content=('A', ', '.join),
    msg_type=('B', 'first')
).reset_index(drop=True)

# 分离客户消息组(msg_type=1)和管理员回复组(msg_type=2)
customer_msgs = grouped[grouped['msg_type'] == 1]['merged_content'].reset_index(drop=True)
admin_replies = grouped[grouped['msg_type'] == 2]['merged_content'].reset_index(drop=True)

# 配对生成目标DataFrame
df2 = pd.DataFrame({'A': customer_msgs, 'B': admin_replies})

代码解释

  1. 分组标记生成:用df1['B'].ne(df1['B'].shift())判断当前行与上一行的消息类型是否不同,配合cumsum()生成连续同类型的分组ID,确保连续的客户消息/管理员回复被分到同一组。
  2. 聚合合并:按分组ID聚合,用, .join()把同组的A列内容合并成字符串,同时记录每组的消息类型。
  3. 配对合并:分别提取客户消息和管理员回复的聚合结果,由于原始数据中客户消息组与管理员回复组是交替出现的,直接按索引对齐合并即可得到目标格式。

运行后df2的输出与需求完全一致:

A       B
0    a, b       c
1  d, e, f  h, j
2       de      be

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:31:03