如何在Pandas中仅为最后一行设置日均损耗列(无需iloc/np.nan)
Pandas实现日均水位损失计算并指定行赋值
原始数据结构
| Day | water level | Avg loss per day |
|---|---|---|
| 1 | 200 | NaN |
| 2 | 190 | NaN |
| 3 | 180 | NaN |
| 4 | 175 | NaN |
| 5 | 174 | NaN |
| 6 | 172 | NaN |
| 7 | 170 | (200-170)/7 |
需求说明
使“Avg loss per day”列除最后一行外均为空白值,最后一行的值计算为:(首行water level值 - 末行water level值) / 总天数,要求不使用iloc和np.nan实现。
此前错误代码
df['Avg loss per day']=(df['water level'].iloc[0]-df['water level'].iloc[6])/7 df = df.round({'Avg loss per day': 2}) df.loc[0:6,['Avg loss per day']]=np.nan
执行时出现“single indexer out of bounds”错误
解决方案代码
# 初始化列值为None(Pandas会自动识别为缺失值,替代np.nan) df['Avg loss per day'] = None # 通过Day列的数值特征定位首尾行,计算日均损失 first_water = df.loc[df['Day'] == 1, 'water level'].item() last_day = df['Day'].max() last_water = df.loc[df['Day'] == last_day, 'water level'].item() avg_loss = (first_water - last_water) / last_day # 给最后一行赋值并保留两位小数 df.loc[df['Day'] == last_day, 'Avg loss per day'] = round(avg_loss, 2)
代码说明
- 用
None初始化目标列,避开np.nan的使用 - 借助
Day列的明确数值(首行Day=1,末行Day为最大值)定位首尾行的水位数据,无需依赖iloc - 仅对最后一行赋值,自然达成其他行为缺失值的效果
内容的提问来源于stack exchange,提问作者firdous
相关产品推荐
相关产品推荐

