Python 根据条件从DataFrame中选择行
我有一个具有多列的数据框架,每列在不同的索引位置包含NaN值。索引为5分钟频率日期时间 取第一列:选择行直到第一个NaN行,或者如果相邻NaN值彼此跟随,则直到第一个NaN范围 我想从值序列预测NaN值,或NaN值 下一次迭代:选择行(从开始)直到下一个NaN值或NaN相邻范围,并选择NaN值/范围。预测NaN值/范围 这将一直持续到列不包含NaN为止Python 根据条件从DataFrame中选择行,python,pandas,Python,Pandas,我有一个具有多列的数据框架,每列在不同的索引位置包含NaN值。索引为5分钟频率日期时间 取第一列:选择行直到第一个NaN行,或者如果相邻NaN值彼此跟随,则直到第一个NaN范围 我想从值序列预测NaN值,或NaN值 下一次迭代:选择行(从开始)直到下一个NaN值或NaN相邻范围,并选择NaN值/范围。预测NaN值/范围 这将一直持续到列不包含NaN为止 import pandas as pd import numpy as np column = ['values'] data = [1,2,
import pandas as pd
import numpy as np
column = ['values']
data = [1,2,3,4, np.nan, 6, 7, 8, np.nan, np.nan, np.nan, 12, 13, 14, np.nan, np.nan, 17, 18]
DateList_ = pd.date_range(start='2018-10-29 10:00:00', end='2018-10-29 11:25:00 ', freq='5T')
df_ = pd.DataFrame(data=data, columns=column, index=DateList_)
第一次迭代:values=[1,2,3,4],nan_periods=1->Forecast[5]from values
第二次迭代:值=[1,2,3,4,5,6,7,8]nan_periods=3->根据值预测[9,10,11]
第三次迭代:值=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]->根据值预测[15,16]
迭代停止,不再有NaN值
预测是用Prophet完成的。我想在选择部分寻求一些帮助,以迭代方式选择包含值的行,以及以下nan/s
不幸的是,我不能使用插值!我拥有的真实序列要复杂得多,不像这个虚拟示例那样是线性的!此示例仅用于演示选择 思想是在
系列中创建具有连续NaN
s的组,然后按groupby
循环,并获取用于预测的变量,因为按位置选择对于按组的第一个值的位置和从列名的位置是必需的,然后通过loc
为替换NaN
s设置值:
s = df_['values'].isna()
g = s.ne(s.shift()).cumsum()[s]
for i, x in df_.groupby(g):
nan_periods = len(x)
values = df_.iloc[:df_.index.get_loc(x.index[0]), df_.columns.get_loc('values')]
print (nan_periods)
print (values)
#sample data
Forecast = 10
df_.loc[x.index, 'values'] = Forecast
print (df_)
values
2018-10-29 10:00:00 1.0
2018-10-29 10:05:00 2.0
2018-10-29 10:10:00 3.0
2018-10-29 10:15:00 4.0
2018-10-29 10:20:00 10.0
2018-10-29 10:25:00 6.0
2018-10-29 10:30:00 7.0
2018-10-29 10:35:00 8.0
2018-10-29 10:40:00 10.0
2018-10-29 10:45:00 10.0
2018-10-29 10:50:00 10.0
2018-10-29 10:55:00 12.0
2018-10-29 11:00:00 13.0
2018-10-29 11:05:00 14.0
2018-10-29 11:10:00 10.0
2018-10-29 11:15:00 10.0
2018-10-29 11:20:00 17.0
2018-10-29 11:25:00 18.0
请说明我提出的解决方案
。。。你问的是线性插值。如果你想要其他的插值方法或应用程序,你必须更具体一些……我编辑了这篇文章,表明不能使用插值。伙计!序列不是线性的!这只是一个虚构的例子,真正的问题是如何选择值,以及nan的迭代范围!如果您想查找NaN或后续NaN的位置,可以使用类似于df_['values'].isna().astype(int).diff().gt(0)
的内容。您必须执行相同的操作,以获取这些后续值结束的索引。您肯定会在Soy中找到类似的内容,您正在做与df_['values']相同的事情。isnull()…非常感谢!正在尝试理解您的代码:D@hk_03-好的,如果有什么需要解释的话,让我知道。有可能用tqdm来包装这个吗?据我所知,几乎任何带有for的东西都可以用tqdm来包装。我猜:对于I,tqdm中的x。tqdm(df_u.groupby(g)):
。如果有效,则有效,否则否:-)