如何考虑同一天的前两个值和前两天的时间来估算电力时间序列数据中的缺失值?

问题描述 投票:0回答:1

我有一个如下所示的 pandas 数据框:

|meter IDs|  |   date   |  |00:00|  |00:30|  |01:00|  |01:30|.......|23:00|  |23:30| 
|    1    |  |2020-09-01|  | 0.30|  | 0.40|  | 0.41|  | 0.42|.......| 0.47|  | 0.39|
|    1    |  |2020-09-02|  | 0.36|  | 0.39|  | nan |  | nan |.......| 0.53|  | 0.41|
|    1    |  |2020-09-03|  | 0.26|  | 0.33|  | 0.38|  | nan|....... | nan |  | 0.45|
|    1    |  |2020-09-04|  | 0.36|  | 0.40|  | 0.41|  | 0.42|.......| 0.69|  | nan |
|    1    |  |2020-09-05|  | 0.30|  | 0.40|  | 0.41|  | 0.42|.......| 0.69|  | 0.62|
     :             :          :        :        :        :   .......   :        :  
|    1    |  |2020-12-31|  | 0.30|  | 0.40|  | 0.41|  | 0.42|.......| 0.69|  | 0.62|
|    2    |  |2020-09-01|  | 0.55|  | 0.57|  | nan |  | 0.60|.......| 0.68|  | 0.62|
|    2    |  |2020-09-02|  | 0.61|  | 0.59|  | 0.66|  | nan |.......| nan |  | nan |
|    2    |  |2020-09-03|  | 0.64|  | nan |  | 0.66|  | 0   |.......| 0.66|  | 0.67|
|    2    |  |2020-09-04|  | 0.58|  | 0.65|  | 0.65|  | 0.71|.......| 0.69|  | 0.66|
|    2    |  |2020-09-05|  | 0.49|  | 0.52|  | 0.55|  | nan |.......| nan |  | 0.62|
     :             :          :        :        :        :   .......   :        :  
|    2    |  |2020-12-31|  | 0.48|  | 0.51|  | nan |  | 0.52|.......| 0.63|  | 0.61|

我想根据同一天和前 2 天同一时间的前 2 个值和后 2 个值的平均值来填充各个电表 ID 的缺失值?

我该如何解决这个问题?预先感谢。

python pandas dataframe missing-data imputation
1个回答
0
投票

听说pandas的

fillna()
很有用,但我没用过。但是,我可以帮助您使用迭代数据框的自定义填充函数。这样的事情可能会有所帮助:

import pandas as pd

df.sort_values(by=['meter IDs', 'date'], inplace=True)

def fill_missing(df):
    for meter_id, group in df.groupby('meter IDs'):
        for col in df.columns[2:]:
            for i in range(len(df)):
                if pd.isnull(df.at[i, col]):
                    prev_vals = group[(group['date'] < df.at[i, 'date']) & (group[col].notnull())].tail(2)[col]
                    next_vals = group[(group['date'] > df.at[i, 'date']) & (group[col].notnull())].head(2)[col]
                    mean_val = pd.concat([prev_vals, next_vals]).mean()
                    df.at[i, col] = mean_val

fill_missing(df)
print(df)
© www.soinside.com 2019 - 2024. All rights reserved.