如何用星期几和小时数据的平均值填充缺失值
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)
我对如何使用 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)