python - 如何使用Python计算最近三个非nan值的平均值
问题描述
我有一个df
如下所示的数据框。我想计算最后 3 个非 nan 列的平均值。如果非缺失列少于三个,则平均数缺失。
name day1 day2 day3 day4 day5 day6 day7
A 1 1 nan 2 3 0 3
B nan nan nan nan nan nan 3
C 1 1 0 1 1 1 1
D 1 1 0 1 nan 1 4
预期输出应如下所示
name day1 day2 day3 day4 day5 day6 day7 expected
A 1 1 nan 2 3 0 3 2 <- 1/3*(day5 + day6 + day7)
B nan nan nan nan nan nan 3 nan <- less than 3 non-missing
C 1 1 0 1 1 1 1 1 <- 1/3*(day5 + day6 + day7)
D 1 1 0 1 nan 1 4 2 <- 1/3 *(day4 + day6 + day7)
我知道如何计算最后三列的平均值并计算有多少非缺失观察值。
df.iloc[:, 5:7].count(axis=1) average of the last three column
df.iloc[:, 5:7].count(axis=1) number of non-nan in the last three column
如果有少于 3 个非缺失观察,我知道如何使用 df.iloc[:, 1:7].count(axis=1) <= 3
.
但我正在努力寻找一种方法来计算最后三个非缺失列的平均值。谁能教我如何解决这个问题?
解决方案
向量化一个使用justify
-
N = 3 # last N entries for averaging
avg = np.mean(justify(df.values,invalid_val=np.nan,axis=1, side='right')[:,-N:],1)
df['expected'] = avg
推荐阅读
- json - 我如何能够比较两组 JSON 数据并检查一组是否在另一组中
- javascript - Async/Await:推理与实现
- javascript - 如何在javascript中将特定格式的日期转换为yyyy-mm-dd格式
- machine-learning - 使用 ML 识别 windows 计算机名称
- reactjs - 如何让 Accordion 行颜色在两种颜色之间交替?
- npm - 如何使用纱线工作区运行两个开发服务器?
- artificial-intelligence - 对象模式中未定义的类“command_data” - CLIPS
- python - Django 视图和 HTML 表单
- ffmpeg - ffmpeg 操作不允许在 rtmp 上使用
- swiftui - SwiftUI - 致命错误:每个布局项只能出现一次:文件 SwiftUI,第 0 行