需求:按Key分组统计code列存在差异字符的分组并生成新DataFrame
按Key前缀分组判断code差异并统计结果
首先给出原始数据:
import pandas as pd # 初始化数据 data = {'Key': ['111*1', '111*2','111*3', '222*1','222*2', '333*1','333*2', '333*3','333*4', '444*1'], 'code': ['S', 'S','Q', 'M','M', 'F','F', 'F','N', 'C']} # 创建DataFrame df = pd.DataFrame(data)
实现步骤
- 提取分组标识:从
Key列中提取前缀(如111*)作为分组依据,新增group_key列:
df['group_key'] = df['Key'].str.split('*').str[0] + '*'
- 循环处理每个分组:
# 获取所有唯一分组 unique_groups = df['group_key'].unique() # 存储符合条件的分组信息 qualified_groups = [] count = 0 for group in unique_groups: # 取出当前分组的所有code值 group_codes = df[df['group_key'] == group]['code'] # 判断分组内code是否存在差异:唯一值数量大于1则说明有差异 if len(group_codes.unique()) > 1: count += 1 qualified_groups.append({'group_key': group, 'code_values': list(group_codes)}) # 输出统计结果 print(f"符合条件的分组总数:{count}") # 生成包含目标分组的新DataFrame result_df = pd.DataFrame(qualified_groups) print(result_df)
运行结果
符合条件的分组总数为2,生成的新DataFrame如下:
group_key code_values 0 111* [S, S, Q] 1 333* [F, F, F, N]
逻辑说明
- 分组
111*的code包含S、Q两种不同值,存在差异,计入统计; - 分组
222*的code全为M,无差异,不计入; - 分组
333*的code包含F、N两种不同值,存在差异,计入统计; - 分组
444*仅单个code值,无差异,不计入。
内容的提问来源于stack exchange,提问作者AAA
相关产品推荐
相关产品推荐

