如何在DataFrame中按前缀分组创建均值、最小值新列?
解决方法
没问题,这在pandas里有挺直观的实现方式,我给你两种实用思路,按需选择就行:
方法1:针对单个前缀手动生成(适合前缀少的情况)
如果你的前缀只有A1、B1这类少数几个,直接用filter筛选对应列再聚合就行,代码简单易懂:
import pandas as pd # 假设你的DataFrame名为df df['A1_Mean'] = df.filter(like='A1_').mean(axis=1) # 所有A1开头列的行均值 df['A1_Min'] = df.filter(like='A1_').min(axis=1) # 所有A1开头列的行最小值 df['B1_Mean'] = df.filter(like='B1_').mean(axis=1) df['B1_Min'] = df.filter(like='B1_').min(axis=1)
filter(like='A1_')会精准筛选出列名包含A1_的所有列;axis=1指定按行计算聚合值(默认axis=0是按列,这里我们需要每行的均值/最小值)。
方法2:批量处理所有前缀(适合前缀多的情况)
如果后续还有C1、D1这类更多前缀,手动写每个前缀太麻烦,可以用列名分组的方式批量生成:
import pandas as pd # 1. 提取所有列名的前缀(比如把"A1_Factor1"拆成"A1") prefixes = df.columns.str.split('_').str[0] # 2. 按前缀分组,批量计算均值和最小值 aggregated = df.groupby(prefixes, axis=1).agg(['mean', 'min']) # 3. 重命名列,改成你需要的格式(比如"A1_mean"→"A1_Mean") aggregated.columns = [f'{prefix}_{func.capitalize()}' for prefix, func in aggregated.columns] # 4. 把聚合结果合并回原DataFrame df = pd.concat([df, aggregated], axis=1)
这种方法会自动识别所有前缀(比如A1、B1、C1),一次性生成所有前缀的Mean和Min列,扩展性很强。
小提示
如果你的列名分隔符不是下划线_(比如用点.),只需要把str.split('_')改成对应的分隔符就行,比如str.split('.')。
内容的提问来源于stack exchange,提问作者Prince
相关产品推荐
相关产品推荐

