我有一个如下所示的 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 的缺失值?
我该如何解决这个问题?预先感谢。
听说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)