如何用Pandas按多列分组合并行数据?(排除COLUMN2为YELLOW的行)
Pandas实现指定条件的分组合并
方案一:高效拆分合并法(推荐)
这种方法逻辑清晰,执行效率更高,适合数据量较大的场景:
import pandas as pd # 构造你的原始数据(实际使用时替换成读取你的数据源,比如pd.read_csv) data = { 'COLUMN1': ['APPLE', 'BANANA', 'BANANA', 'GRAPE', 'GRAPE', 'GRAPE', 'GRAPE', 'GRAPE', 'MELON', 'MELON'], 'COLUMN2': ['RED', 'YELLOW', 'YELLOW', 'VIOLET', 'VIOLET', 'VIOLET', 'PURPLE', 'PURPLE', 'GREEN', 'GREEN'], 'COLUMN3': ['JOHN, JANE', 'SMITH', 'EMILY', 'JESSICA', 'REIRA', 'EMMA', 'JOE', 'LISA', 'RIO', 'REIRA'] } df = pd.DataFrame(data) # 1. 拆分数据:分离COLUMN2为YELLOW的行和其他行 yellow_rows = df[df['COLUMN2'] == 'YELLOW'] other_rows = df[df['COLUMN2'] != 'YELLOW'] # 2. 对非YELLOW行分组合并COLUMN3 merged_others = other_rows.groupby(['COLUMN1', 'COLUMN2'])['COLUMN3'].agg(', '.join).reset_index() # 3. 合并两部分数据并排序 result = pd.concat([merged_others, yellow_rows], ignore_index=True) result = result.sort_values('COLUMN1').reset_index(drop=True) print(result)
方案二:自定义分组函数法
如果需要更灵活的分组逻辑,可以用自定义函数处理每个分组:
import pandas as pd df = pd.DataFrame(data) # 同方案一的数据源 def process_group(group): # 如果当前分组的COLUMN2是YELLOW,直接返回原组 if group['COLUMN2'].iloc[0] == 'YELLOW': return group # 否则合并COLUMN3,生成单行数据 return pd.DataFrame({ 'COLUMN1': [group['COLUMN1'].iloc[0]], 'COLUMN2': [group['COLUMN2'].iloc[0]], 'COLUMN3': [', '.join(group['COLUMN3'])] }) # 按COLUMN1和COLUMN2分组,应用自定义函数后合并结果 result = df.groupby(['COLUMN1', 'COLUMN2'], group_keys=False).apply(process_group).reset_index(drop=True) print(result)
思路说明
- 分组依据:核心是按
COLUMN1(水果)和COLUMN2(颜色)分组,确保同一水果同颜色的行被归为一组。 - 条件判断:针对
COLUMN2为YELLOW的分组,跳过合并操作,保留原始行;其他分组则将COLUMN3的所有值用逗号拼接成单个字符串。 - 结果整合:无论是拆分合并还是自定义函数,最终都需要把处理后的部分和保留的YELLOW行整合,排序后得到目标格式。
内容的提问来源于stack exchange,提问作者now
相关产品推荐
相关产品推荐

