如何对Pandas DataFrame中带C1-C6后缀ID的行进行分组?
解决方法
1. 先从名称中提取目标ID
groupby无法识别C1-C6,核心原因是这些ID嵌在名称字符串里,不是独立的分组列。先把ID提取出来:
场景1:ID固定在名称末尾(如XXXC4)
假设你的样本名称列叫sample_name,用正则提取末尾的C+数字组合:
import pandas as pd # 读取数据集 df = pd.read_excel('your_data.xlsx') # 提取末尾的ID df['group_id'] = df['sample_name'].str.extract(r'(C\d+)$')
场景2:ID可能出现在名称任意位置(仅为C1-C6)
如果ID不一定在末尾,但属于指定的C1-C6集合,直接匹配关键词:
target_ids = ['C1', 'C2', 'C3', 'C4', 'C5', 'C6'] pattern = '|'.join(target_ids) df['group_id'] = df['sample_name'].str.extract(f'({pattern})')
2. 基于提取的ID执行分组
有了独立的group_id列,groupby就能正常识别分组了:
# 按ID分组并计算特征均值(示例操作) grouped_result = df.groupby('group_id').mean() # 如果需要在原数据中添加分组统计值,用transform df['feature_group_avg'] = df.groupby('group_id')['your_feature_column'].transform('mean')
3. 排查异常情况
- 检查提取后是否有缺失ID:如果存在,说明部分名称未匹配到目标格式,需要调整正则或确认名称规则
# 查看未匹配到ID的样本名称 unmatched_samples = df[df['group_id'].isna()]['sample_name'] print(unmatched_samples)
- 确保
group_id是字符串类型:避免数字格式导致的分组错误
df['group_id'] = df['group_id'].astype(str)
内容的提问来源于stack exchange,提问作者hello
相关产品推荐
相关产品推荐

