如何按组获取列值的唯一组合并添加至原DataFrame
解决方法
要实现按RTG_ID分组统计TYPE的无序组合,并将组合信息和计数合并回原DataFrame,可按以下步骤操作:
步骤1:生成每个分组的组合字符串
按RTG_ID分组后,提取每组TYPE的唯一值,排序后用逗号拼接(排序是为了统一无序组合的格式,确保CD,FF,EF和FF,CD,EF被视为同一组合)。
步骤2:统计每个组合的出现次数
基于生成的组合字符串,统计每个组合在所有分组中出现的次数。
步骤3:合并信息到原DataFrame
将组合字符串和计数与原DataFrame按RTG_ID关联,完成数据整合。
完整代码
import pandas as pd # 原DataFrame data = {'RTG_ID': ['AA','AA','AA','BB','BB','CC','CC','CC','EE','EE','EE','GG','GG','FF','FF'], 'TYPE': ['CD','FF','EF','CD','EG','CD','EF','FF','CD','EF','HH','CD','EG','CD','TT']} df = pd.DataFrame(data) # 1. 生成每个RTG_ID对应的无序组合字符串(排序后拼接) group_combinations = df.groupby('RTG_ID')['TYPE'].agg( lambda x: ','.join(sorted(x.unique())) ).reset_index(name='COMBINATIONS') # 2. 统计每个组合的出现次数 combination_counts = group_combinations['COMBINATIONS'].value_counts().reset_index() combination_counts.columns = ['COMBINATIONS', 'COUNT'] # 3. 合并组合信息、计数与原DataFrame df_output = df.merge( group_combinations.merge(combination_counts, on='COMBINATIONS'), on='RTG_ID' ) print(df_output)
输出结果
运行代码后得到的df_output与期望结果一致:
RTG_ID TYPE COMBINATIONS COUNT 0 AA CD CD,EF,FF 2 1 AA FF CD,EF,FF 2 2 AA EF CD,EF,FF 2 3 BB CD CD,EG 2 4 BB EG CD,EG 2 5 CC CD CD,EF,FF 2 6 CC EF CD,EF,FF 2 7 CC FF CD,EF,FF 2 8 EE CD CD,EF,HH 1 9 EE EF CD,EF,HH 1 10 EE HH CD,EF,HH 1 11 GG CD CD,EG 2 12 GG EG CD,EG 2 13 FF CD CD,TT 1 14 FF TT CD,TT 1
注:组合字符串的元素顺序为排序后结果,与示例中的顺序略有不同,但不影响组合的唯一性判定(因为无序组合不关心顺序)。若需保持示例中的元素顺序,可去掉sorted()函数,但这样会导致CD,FF,EF和FF,CD,EF被视为不同组合,不符合“组合不考虑顺序”的需求。
内容的提问来源于stack exchange,提问作者Josephine Fang
相关产品推荐
相关产品推荐

