如何将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})
代码解释
- 分组标记生成:用
df1['B'].ne(df1['B'].shift())判断当前行与上一行的消息类型是否不同,配合cumsum()生成连续同类型的分组ID,确保连续的客户消息/管理员回复被分到同一组。 - 聚合合并:按分组ID聚合,用
,.join()把同组的A列内容合并成字符串,同时记录每组的消息类型。 - 配对合并:分别提取客户消息和管理员回复的聚合结果,由于原始数据中客户消息组与管理员回复组是交替出现的,直接按索引对齐合并即可得到目标格式。
运行后df2的输出与需求完全一致:
A B 0 a, b c 1 d, e, f h, j 2 de be
内容的提问来源于stack exchange,提问作者Dima
相关产品推荐
相关产品推荐

