微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何用星期几和小时数据的平均值填充缺失值

如何解决如何用星期几和小时数据的平均值填充缺失值

我有一些关于如何用多索引填充数据的问题

我有这样的数据示例

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.transformmeanDataFrame.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 举报,一经查实,本站将立刻删除。