基于多列索引聚合Pandas DataFrame,合并指定列唯一值
Pandas DataFrame分组合并处理方案
需求说明
- 以
['category_1', 'category_2', 'level_1']作为分组依据,将DataFrame合并为该组合唯一的结构 - 对
['color', 'Name', 'Name_2']列,将每组内的不同取值用空格拼接合并 ['m','k']列保留每组内的原始值(每组内该列值一致)
处理前后示例
处理前DataFrame
color Name Name_2 category_1 category_2 level_1 m k 0 black Tom Karl a x 2 asd hf 1 green Tom Karl a x 2 asd hf 2 red red johans b x 2 xg cvb 3 red tan johans b x 2 xg cvb 4 white krish bill a x 3 et cvh 5 white krish jack a x 3 et cvh 6 orange krish bill a x 3 et cvh 7 orange krish jack a x 3 et cvh 8 jack jack frank b x 3 fgd gfh 9 jack bac frank b x 3 fgd gfh 10 blue bob teo b y 3 dfg cvh 11 green bob teo b y 3 dfg cvh
处理后DataFrame
color Name Name_2 category_1 category_2 level_1 m k 0 black green Tom Karl a x 2 asd hf 1 red red tan johans b x 2 xg cvb 2 white orange krish bill jack a x 3 et cvh 3 jack jack bac frank b x 3 fgd gfh 4 blue green bob teo b y 3 dfg cvh
实现代码
import pandas as pd # 构造示例数据 data = { 'color': ['black', 'green', 'red', 'red', 'white', 'white', 'orange', 'orange', 'jack', 'jack', 'blue', 'green'], 'Name': ['Tom', 'Tom', 'red', 'tan', 'krish', 'krish', 'krish', 'krish', 'jack', 'bac', 'bob', 'bob'], 'Name_2': ['Karl', 'Karl', 'johans', 'johans', 'bill', 'jack', 'bill', 'jack', 'frank', 'frank', 'teo', 'teo'], 'category_1': ['a', 'a', 'b', 'b', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'], 'category_2': ['x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'y', 'y'], 'level_1': [2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3], 'm': ['asd', 'asd', 'xg', 'xg', 'et', 'et', 'et', 'et', 'fgd', 'fgd', 'dfg', 'dfg'], 'k': ['hf', 'hf', 'cvb', 'cvb', 'cvh', 'cvh', 'cvh', 'cvh', 'gfh', 'gfh', 'cvh', 'cvh'] } df = pd.DataFrame(data) # 定义聚合规则:去重后拼接/保留唯一值 agg_rules = { 'color': lambda col: ' '.join(pd.unique(col)), 'Name': lambda col: ' '.join(pd.unique(col)), 'Name_2': lambda col: ' '.join(pd.unique(col)), 'm': 'first', # 每组内值一致,取第一个即可 'k': 'first' } # 分组聚合并重置索引 result_df = df.groupby(['category_1', 'category_2', 'level_1'], as_index=False).agg(agg_rules) # 调整列顺序与示例匹配 result_df = result_df[['color', 'Name', 'Name_2', 'category_1', 'category_2', 'level_1', 'm', 'k']] print(result_df)
内容的提问来源于stack exchange,提问作者dimzev
相关产品推荐
相关产品推荐

