如何合并Python DataFrame中共享某一列值的行?
处理带共享前缀的DataFrame分组需求
看起来你是想对description列里共享相同前缀的行做分组处理对吧?比如AAAA:A、AAAA:B这些属于同一组,BBBB:A、BBBB:B属于另一组。这里给你几个Pandas原生的简洁实现方案,完全不用复杂操作:
方案1:提取前缀后分组(直观易懂)
先从description里拆分出前缀,再用这个前缀做分组,新手也能快速理解:
import pandas as pd data = { "description": ["AAAA:A", "AAAA:B", "AAAA:C", "AAAA:D", "BBBB:A", "BBBB:B"], "sequence": ["AAAAAAAAAAA", "AAAAAAABBBBBB", "AAAAAAAACCCCCCC", "AAAAAAAADDDDDDD", "BBBBBBAAAAA", "BBBBBBBBBBBBB"] } df = pd.DataFrame(data) # 按冒号分割,提取前缀部分 df["prefix"] = df["description"].str.split(":", expand=True)[0] # 基于前缀分组 grouped = df.groupby("prefix") # 遍历查看每个分组的内容 for prefix, group in grouped: print(f"=== 分组 {prefix} ===") print(group)
方案2:无新增列的直接分组(更简洁)
如果不想修改原DataFrame的结构,可以直接在groupby里处理前缀,一步到位:
# 直接通过lambda函数提取前缀分组,无需额外列 grouped = df.groupby(lambda idx: df["description"].iloc[idx].split(":")[0]) # 同样可以遍历分组 for prefix, group in grouped: print(f"=== 分组 {prefix} ===") print(group)
方案3:前缀长度固定时的高效分组
如果你的前缀长度是固定的(比如例子里都是4个字符),用字符串切片会比分割更快,适合大数据量场景:
# 前缀固定4位,直接切片取前4个字符分组 grouped = df.groupby(df["description"].str[:4]) # 查看分组结果 for prefix, group in grouped: print(f"=== 分组 {prefix} ===") print(group)
这几个方案都是轻量且高效的,完全符合你想要的「简洁直接」的要求。如果分组后还要做聚合、过滤之类的操作,直接在grouped对象上调用对应的方法就行(比如grouped.sum()、grouped.filter())。
内容的提问来源于stack exchange,提问作者jaumebonet
相关产品推荐
相关产品推荐

