python - 如何用特定时间值的平均值填充 Nan 值?
问题描述
我有一个数据集,其中包含一个月的每分钟数据。但是有很多价值是缺失的。我的数据集如下所示:
Date Col1 Col2
2018-06-01 08:01:00 Nan Nan
2018-06-01 08:02:00 14 24
2018-06-01 08:03:00 17 18
2018-06-01 08:04:00 Nan Nan
...........
...........
...........
...........
2018-06-30 23:57:00 12 13
2018-06-30 23:58:00 Nan Nan
2018-06-30 23:59:00 18 22
整个数据集中每分钟将有30 个值。所以,我想用那一分钟的平均值填充缺失的值。我想每分钟都这样做。
例如:
Date Col1 Col2
2018-06-01 08:01:00 Nan Nan
2018-06-02 08:01:00 14 21
2018-06-03 08:01:00 16 28
2018-06-04 08:01:00 Nan Nan
...........
...........
...........
...........
2018-06-28 08:01:00 12 19
2018-06-29 08:01:00 Nan Nan
2018-06-30 08:01:00 17 22
所以,为了首先得到所有的值08:01:00
,我做df.at_time('08:01:00')
了上面的示例表。但是那如何填补那个时候的缺失值呢?如果我这样做df.fillna(df.at_time('08:01:00').mean())
,它会用 at 的平均值填充整个数据集的所有缺失值08:01:00
,但我只想用值08:01:00
的平均值填充at 的缺失08:01:00
值。我希望每一分钟都这样做。
任何帮助,将不胜感激!
编辑:
您可以通过以下代码创建数据框,也可以创建自己的随机示例
df = pd.DataFrame({'Col1': [1,5,6,Nan,Nan,Nan]}, index= ['2018-06-01 08:00:00','2018-06-01 08:01:00','2018-06-02 08:01:00','2018-06-03 08:01:00', '2018-06-04 08:01:00','2018-06-02 08:00:00'])
解决方案
我认为您需要GroupBy.transform
按以下方式time
替换缺失值fillna
:
print (df)
Date Col1 Col2
0 2018-06-01 08:01:00 NaN NaN
1 2018-06-02 08:01:00 14.0 24.0 <-change datetime
2 2018-06-03 08:01:00 17.0 18.0 <-change datetime
3 2018-06-01 08:04:00 NaN NaN
4 2018-06-30 23:57:00 12.0 13.0
5 2018-06-30 23:58:00 NaN NaN
6 2018-06-30 23:59:00 18.0 22.0
cols = ['Col1','Col2']
df[cols] = df[cols].fillna(df.groupby(df['Date'].dt.time)[cols].transform('mean'))
或者使用自定义 lambda 函数:
cols = ['Col1','Col2']
df[cols] = df.groupby(df['Date'].dt.time)[cols].transform(lambda x: x.fillna(x.mean()))
print (df)
Date Col1 Col2
0 2018-06-01 08:01:00 15.5 21.0
1 2018-06-02 08:01:00 14.0 24.0
2 2018-06-03 08:01:00 17.0 18.0
3 2018-06-01 08:04:00 NaN NaN
4 2018-06-30 23:57:00 12.0 13.0
5 2018-06-30 23:58:00 NaN NaN
6 2018-06-30 23:59:00 18.0 22.0
推荐阅读
- php - PHP插件逻辑不适用
- java - 将 MultiDex 添加到 android studio 中的项目但不断收到 java.lang.NoClassDefFoundError
- c# - 如何在 Entity Framework 6 Database First 中对导航属性实现乐观并发
- html - 带有 SVG 的任务时间线 - 无法为最终过渡设置动画
- machine-learning - 使用交叉验证的多性能指标
- javascript - 如何使 mat-select 第一个选项为空?
- oop - 单一职责原则:一个问题
- git - 使用--allow-unrelated-history 维护历史?
- c - 如何将字符串与字符串数组进行比较?
- php - 如何使用 PHP 访问 JSON 数据