如何修改DataFrame中大于行均值的单元格并将差值存入同结构另一DataFrame
Pandas 实现方案
核心逻辑
- 按行计算每行的均值
- 识别所有大于对应行均值的单元格
- 超均值的单元格默认替换为行均值(可按需调整为其他小于等于均值的数值),原值减新值的结果存入差值表,其余单元格差值为0
完整可运行代码
import pandas as pd # 示例原DataFrame,可替换为你的实际数据 raw_df = pd.DataFrame({ '字段1': [3000, 1500, 800], '字段2': [1000, 2500, 1200], '字段3': [2000, 500, 2200] }) # 1. 计算每行均值 row_average = raw_df.mean(axis=1) # 2. 生成大于行均值的布尔掩码 over_avg_mask = raw_df.gt(row_average, axis=0) # 3. 生成修改后的DataFrame:超均值的位置替换为行均值,其余保留原值 modified_df = raw_df.where(~over_avg_mask, row_average, axis=0) # 如果需要自定义替换值(比如示例要求3000替换为1000),可自行修改对应位置的赋值逻辑,比如: # modified_df = raw_df.where(~over_avg_mask, 自定义替换值, axis=0) # 4. 生成差值DataFrame,和原表行索引、列名完全一致 diff_df = raw_df.sub(modified_df) # 输出验证 print("原数据:") print(raw_df) print("\n修改后数据:") print(modified_df) print("\n差值数据:") print(diff_df)
运行效果说明
以示例中的第一行数据为例:
行均值为(3000+1000+2000)/3 = 2000,原值3000大于均值,默认修改后取值为2000,对应差值为1000,可通过自定义替换值调整为你需要的拆分比例。
内容的提问来源于stack exchange,提问作者Abdou
相关产品推荐
相关产品推荐

