如何解决如何用星期几和小时数据的平均值填充缺失值
我有一些关于如何用多索引填充数据的问题
我有这样的数据示例
df :
| ind_Dayofweek | ind_Hour | ind_Min | Date |load(kW)|
|---------------|----------|---------|-------------------|--------|
| 0 | 0 | 0 |1/1/2020 00.00.00 | 2 |
| | | 1 |1/1/2020 00.01.00 | 1 |
| | | . | . | . |
| | | . | . | . |
| | 1 | 0 |1/1/2020 00.01.00 | Nan |
| . | . | . | . | . |
| . | . | . | . | . |
| . | . | . | . | . |
| 5 | 23 | 59 |31/12/2020 23.59.00| Nan |
还有通过多索引对表进行分组并删除日期列
df_grouped_by_ind_mean :
| ind_Dayofweek | ind_Hour | ind_Min |load(kW)|
|---------------|----------|---------|--------|
| 0 | 0 | 0 | 1 |
| | | 1 | 3 |
| | | . | . |
| | | . | . |
| | 1 | 0 | 4 |
| . | . | . | . |
| . | . | . | . |
| . | . | . | . |
| 6 | 23 | 59 | 1 |
(说明一下,df
中缺失的数据只是一个示例。我的数据中缺失的数据更多。)
数据的多索引,由日期列计算,可以如下所示:
ind_Dayofweek
的范围是 [0-6]
ind_Hour
的范围是 [0-23]
ind_Min
的范围是 [0-59]
数据大约是 1/1/2020 00.00.00 - 31/12/2020 23.59.00
我想用 df
中的匹配多索引填充 df_grouped_by_ind_mean
中缺失的负载值。
例如:31/12/2020 23.59.00 负载数据可能会填充 [dayofweek,hour,min] = [5,23,59] 的数据平均值
我已经用了
df_grouped_by_ind_mean = df.groupby([df.ind_Dayofweek,df.ind_Hour,df.ind_Min]).mean()
df = df.fillna(df_grouped_by_ind_mean)
但它不起作用。
我该怎么做?
谢谢
解决方法
如果需要替换所有 3 列的平均值,可以使用 GroupBy.transform
和 mean
和 DataFrame.fillna
:
cols = df.columns.difference(['Date'],sort=False)
mean = df.groupby(['ind_Dayofweek','ind_Hour','ind_Min'])[cols].transform('mean')
df[cols] = df[cols].fillna(mean)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。