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

How can I fill missing value with mean of dayofweek and hour data

我对如何使用 multiindex 填充数据有一些疑问

我有这样的数据示例

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  |

并且还 table 通过多索引分组并删除日期列

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_grouped_by_ind_mean 中匹配的多索引填充 df 中缺失的负载值。

例如: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 with mean and 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)