Python 处理缺失值(条件插补)问题

Python 处理缺失值(条件插补)问题,python,pandas,numpy,interpolation,missing-data,Python,Pandas,Numpy,Interpolation,Missing Data,我在处理丢失的数据时遇到了障碍 我有这个df 索引a b c del 2018-06-25 12:51:00南1 2018-06-25 12:52:00楠楠 2018-06-25 12:53:00楠楠 2018-06-25 12:54:00楠楠 2018-06-25 12:55:00楠楠 2018-06-25 12:56:00楠楠 2018-06-25 12:57:00楠楠 2018-06-25 12:58:00 0.5 0.6 0.6 0.0 2018-06-2

我在处理丢失的数据时遇到了障碍

我有这个df

索引a b c del
2018-06-25 12:51:00南1
2018-06-25 12:52:00楠楠
2018-06-25 12:53:00楠楠
2018-06-25 12:54:00楠楠
2018-06-25 12:55:00楠楠
2018-06-25 12:56:00楠楠
2018-06-25 12:57:00楠楠
2018-06-25 12:58:00    0.5        0.6   0.6     0.0
2018-06-25 12:59:00楠楠0.0
2018-06-25 13:00:00    0.6        0.8   0.6     0.0
2018-06-25 13:01:00楠楠0.0
2018-06-25 13:02:00    0.6        0.9   0.6     0.0
我想做什么

如果不缺少
del
的值,则插入缺少的值

当del有一个值时,我让这个解只保留df,然后在concatene之后进行插值

但我希望避免串联和太多的代码和变量行

dfs= df.loc[df['del'].notnull(),:]
dfs.interpolate(method='time')

dfs1= df.loc[df['del'].isnull(),:]

dfs= pd.concat([dfs,dfs1], axis=1, sort=True,  join_axes=[df.index])

期望输出:

索引a b c del
2018-06-25 12:51:00楠楠1.0
2018-06-25 12:52:00楠楠
2018-06-25 12:53:00楠楠
2018-06-25 12:54:00楠楠
2018-06-25 12:55:00楠楠
2018-06-25 12:56:00楠楠
2018-06-25 12:57:00楠楠
2018-06-25 12:58:00    0.5        0.6   0.6       0.0
2018-06-25 12:59:00    0.6        0.7   0.7       0.0
2018-06-25 13:00:00    0.6        0.8   0.6       0.0
2018-06-25 13:01:00    0.7        0.9   0.7       0.0 
2018-06-25 13:02:00    0.6        0.9   0.6       0.0
用柱子堵住小洞的故事


谢谢使用
.loc
仅在
'del'
不为空时分配插值:

df.loc[df['del'].notnull()] = df.loc[df['del'].notnull()].interpolate(method='time')

                        a     b    c  del
2018-06-25 12:51:00   NaN   NaN  NaN  1.0
2018-06-25 12:52:00   NaN   NaN  NaN  NaN
2018-06-25 12:53:00   NaN   NaN  NaN  NaN
2018-06-25 12:54:00   NaN   NaN  NaN  NaN
2018-06-25 12:55:00   NaN   NaN  NaN  NaN
2018-06-25 12:56:00   NaN   NaN  NaN  NaN
2018-06-25 12:57:00   NaN   NaN  NaN  NaN
2018-06-25 12:58:00  0.50  0.60  0.6  0.0
2018-06-25 12:59:00  0.55  0.70  0.6  0.0
2018-06-25 13:00:00  0.60  0.80  0.6  0.0
2018-06-25 13:01:00  0.60  0.85  0.6  0.0
2018-06-25 13:02:00  0.60  0.90  0.6  0.0

使用
.loc
仅在
'del'
不为空时分配插值:

df.loc[df['del'].notnull()] = df.loc[df['del'].notnull()].interpolate(method='time')

                        a     b    c  del
2018-06-25 12:51:00   NaN   NaN  NaN  1.0
2018-06-25 12:52:00   NaN   NaN  NaN  NaN
2018-06-25 12:53:00   NaN   NaN  NaN  NaN
2018-06-25 12:54:00   NaN   NaN  NaN  NaN
2018-06-25 12:55:00   NaN   NaN  NaN  NaN
2018-06-25 12:56:00   NaN   NaN  NaN  NaN
2018-06-25 12:57:00   NaN   NaN  NaN  NaN
2018-06-25 12:58:00  0.50  0.60  0.6  0.0
2018-06-25 12:59:00  0.55  0.70  0.6  0.0
2018-06-25 13:00:00  0.60  0.80  0.6  0.0
2018-06-25 13:01:00  0.60  0.85  0.6  0.0
2018-06-25 13:02:00  0.60  0.90  0.6  0.0

输出中的某些值似乎已关闭。在两个0.6的值之间插值得到0.7。这只是一个示例,输出中的一些值似乎关闭了。在两个0.6的值之间插值得到0.7。这只是一个例子。我会试试这个