如何在data frame中按TEMPERATURE分组求均值替换DRUG=C的READING值
实现方案(Python Pandas 版本)
以下代码可直接运行得到你需要的两种输出结果:
步骤1:导入依赖并构造示例数据
import pandas as pd # 构造和你示例一致的原始DataFrame data = { 'DRUG': ['A','A','A','A','B','B','B','B','C','C','C','C','C','C','C','D'], 'READING1': [1,1,2,2,8,8,8,9,12,11,12,12,11,11,11,20], 'READING2': [2,2,2,3,9,8,9,8,11,11,11,11,12,12,12,21], 'READING3': [3,3,1,3,7,8,9,7,12,11,11,11,12,11,12,21], 'TEMPERATURE': [12,12,14,16,12,14,14,16,12,12,14,14,14,16,16,12] } df = pd.DataFrame(data)
步骤2:计算DRUG=C的分组均值
# 筛选DRUG为C的行,按TEMPERATURE分组计算三个读数字段的均值,保留1位小数匹配你的示例 c_group_mean = df[df['DRUG'] == 'C'].groupby('TEMPERATURE')[['READING1', 'READING2', 'READING3']].mean().round(1)
如果需要输出整数结果,将.round(1)改为.round(0)或者追加.astype(int)即可。
步骤3:生成第一种输出(保留所有原始行,C的原值替换为对应均值)
df_output1 = df.copy() # 将均值映射替换到原表中DRUG=C的对应行 for temp in c_group_mean.index: mask = (df_output1['DRUG'] == 'C') & (df_output1['TEMPERATURE'] == temp) df_output1.loc[mask, ['READING1', 'READING2', 'READING3']] = c_group_mean.loc[temp].values print(df_output1)
步骤4:生成第二种输出(C按温度聚合去重,其余行保留原始值)
# 保留所有非C的原始行 non_c_df = df[df['DRUG'] != 'C'] # 给C的聚合均值表补充DRUG字段,调整列顺序后和非C表拼接 c_agg_df = c_group_mean.reset_index() c_agg_df['DRUG'] = 'C' c_agg_df = c_agg_df[['DRUG', 'READING1', 'READING2', 'READING3', 'TEMPERATURE']] df_output2 = pd.concat([non_c_df, c_agg_df], ignore_index=True) print(df_output2)
内容的提问来源于stack exchange,提问作者IronMaiden
相关产品推荐
相关产品推荐

