问题描述
Ts.index
是启动窗口的启动,Ts['end']
是窗口的结尾。
Ts
的每个时间值都在df.index
中。
但是df
包含NaN。
因此,我需要找出哪个“时间窗口” (== Ts.index[i]
至Ts['end']
)
在至少df
的一列中是'all-NaN ,然后将这些索引放在Ts
中。
注意:开始和结束的时间窗口距离没有规律性/频率。 (但这是真的:end> =开始,结束总是在以后)
可重现的样本:(实际上有50列x 1百万行->我们需要速度)
import numpy as np,pandas as pd
Ts=pd.DataFrame({"end":pd.to_datetime(np.asarray([ '2019-08-20 10:23:00','2019-08-20 10:24:00','2019-08-20 10:25:00','2019-08-20 10:26:00','2019-08-20 10:27:00','2019-08-20 10:28:00','2019-08-20 10:29:00','2019-08-20 10:30:00','2019-08-20 10:31:00','2019-08-20 10:32:00','2019-08-20 10:33:00','2019-08-20 10:34:00','2019-08-20 10:35:00','2019-08-20 10:36:00','2019-08-20 10:37:00','2019-08-20 10:38:00','2019-08-20 10:39:00','2019-08-20 10:40:00','2019-08-20 10:41:00','2019-08-20 10:42:00','2019-08-20 10:43:00','2019-08-20 10:44:00','2019-08-20 10:45:00','2019-08-20 10:46:00','2019-08-20 10:47:00','2019-08-20 10:48:00','2019-08-20 10:49:00','2019-08-20 10:50:00','2019-08-20 10:51:00','2019-08-20 10:52:00','2019-08-20 10:53:00','2019-08-20 10:54:00','2019-08-20 10:55:00','2019-08-20 10:56:00','2019-08-20 10:57:00','2019-08-20 10:58:00','2019-08-20 10:59:00','2019-08-20 11:00:00','2019-08-20 11:01:00','2019-08-20 11:02:00','2019-08-20 11:03:00','2019-08-20 11:04:00','2019-08-20 11:05:00','2019-08-20 11:06:00','2019-08-20 11:07:00','2019-08-20 11:08:00','2019-08-20 11:09:00','2019-08-20 11:10:00','2019-08-20 11:11:00','2019-08-20 11:12:00','2019-08-20 11:13:00','2019-08-20 11:14:00','2019-08-20 11:15:00','2019-08-20 11:16:00','2019-08-20 11:17:00','2019-08-20 11:18:00','2019-08-20 11:19:00','2019-08-20 11:20:00','2019-08-20 11:21:00','2019-08-20 11:22:00','2019-08-20 11:23:00','2019-08-20 11:24:00','2019-08-20 11:25:00','2019-08-20 11:26:00','2019-08-20 11:27:00','2019-08-20 11:28:00','2019-08-20 11:29:00','2019-08-20 11:30:00','2019-08-20 11:31:00','2019-08-20 11:32:00','2019-08-20 11:33:00','2019-08-20 11:34:00','2019-08-20 11:35:00','2019-08-20 11:36:00','2019-08-20 11:37:00','2019-08-20 11:38:00','2019-08-20 11:39:00','2019-08-20 11:40:00','2019-08-20 11:41:00','2019-08-20 11:42:00','2019-08-20 11:43:00','2019-08-20 11:44:00','2019-08-20 11:45:00','2019-08-20 11:46:00','2019-08-20 11:47:00','2019-08-20 11:48:00','2019-08-20 11:49:00','2019-08-20 11:50:00','2019-08-20 11:51:00','2019-08-20 11:52:00','2019-08-20 11:53:00','2019-08-20 11:54:00','2019-08-20 11:55:00','2019-08-20 11:56:00','2019-08-20 11:57:00','2019-08-20 11:58:00','2019-08-20 11:59:00','2019-08-20 12:00:00']))},index = pd.DatetimeIndex(['2019-08-20 10:21:00','2019-08-20 10:22:00','2019-08-20 10:23:00','2019-08-20 11:58:00']))
df_ix = index_ = pd.DatetimeIndex(['2019-08-20 10:21:00','2019-08-20 12:00:00'],dtype='datetime64[ns]',freq=None)
df = pd.DataFrame( {"A":np.random.uniform(low=0.5,high=13.3,size=(len(df_ix),)),"B":np.random.uniform(low=0.5,"C":np.random.uniform(low=0.5,"D":np.random.uniform(low=0.5,"E":np.random.uniform(low=0.5,))},index = df_ix)
for col in df:
ori_rat = df[col].isna().mean()
if ori_rat >= 0.2: continue
add_miss_rat = (0.2 - ori_rat) / (1 - ori_rat)
vals_to_nan = df[col].dropna().sample(frac=add_miss_rat).index
df.loc[vals_to_nan,col] = np.NaN
start end
2019-08-20 10:21:00 2019-08-20 10:23:00
2019-08-20 10:22:00 2019-08-20 10:24:00
2019-08-20 10:23:00 2019-08-20 10:25:00
2019-08-20 10:24:00 2019-08-20 10:26:00
2019-08-20 10:25:00 2019-08-20 10:27:00
...
2019-08-20 11:54:00 2019-08-20 11:56:00
2019-08-20 11:55:00 2019-08-20 11:57:00
2019-08-20 11:56:00 2019-08-20 11:58:00
2019-08-20 11:57:00 2019-08-20 11:59:00
2019-08-20 11:58:00 2019-08-20 12:00:00
[98 rows x 1 columns]
A B C D E
2019-08-20 10:21:00 8.035600 4.453110 6.595318 0.626946 NaN
2019-08-20 10:22:00 9.496972 8.551003 NaN 1.524396 9.528287
2019-08-20 10:23:00 6.696175 4.877189 4.741549 11.229296 0.895824
2019-08-20 10:24:00 12.416047 NaN 3.716054 3.250250 7.841599
2019-08-20 10:25:00 NaN 11.980202 11.012225 6.537954 NaN
... ... ... ... ...
2019-08-20 11:56:00 NaN NaN 10.528517 NaN 5.378760
2019-08-20 11:57:00 6.535326 NaN 9.437784 12.542822 NaN
2019-08-20 11:58:00 NaN 12.730569 NaN 7.565673 2.653956
2019-08-20 11:59:00 NaN 7.047969 3.072487 8.413695 4.314163
2019-08-20 12:00:00 10.486452 1.269555 9.090241 2.446426 3.004084
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)