从主数据帧中选择特定的数据切片,条件是主数据帧列中的值

我有一个主数据机(df),一个带有日期列(非索引),一个带有值的列“VXX_Full”和一个“信号”列。


我想循环访问信号列,每当它是1时,我想捕获“VXX_Full”列的切片(之前20行,之后40行),并创建一个包含所有切片的新数据帧。我希望新数据帧的列名是原始数据帧的行号。


VXX_signal = pd.DataFrame(np.zeros((60,0)))


counter = 1


for row in df.index:


if df.loc[row,'signal'] == 1:

    add_row = df.loc[row - 20:row +20,'VXX_Full']

    VXX_signal[counter] = add_row

    counter +=1


VXX_signal

它似乎不起作用。它创建一个数据帧,但值都是 Nan。第一个切片,它至少看起来是从主df获取数据,但是数据不对应于正确的位置。新 df 中的以下列集(有 30 个信号,因此创建了 30 列)都是 NaN


提前致谢!


紫衣仙女
浏览 90回答 2
2回答

隔江千里

我不确定您当前的代码 - 但基本上您所需要的只是索引范围的列表。如果您的索引是线性的,则如下所示:indexes = list(df[df.signal==1].index)ranges = [(i,list(range(i-20,i+21))) for i in indexes] #create tuple (original index,range)dfs = [df.loc[i[1]].copy().rename(                    columns={'VXX_Full':i[0]}).reset_index(drop=True) for i in ranges]#EDIT: for only the VXX_Full Column:dfs = [df.loc[i[1]].copy()[['VXX_Full']].copy().rename(                    columns={'VXX_Full':i[0]}).reset_index(drop=True) for i in ranges]#here we take the -20:+20 slice of df, make a separate dataframe, the#we change 'VXX_Full' to the original index value, and reset index to give it 0:40 index.#The new index will be useful when putting all the columns next to each other.因此,我们制作了一个信号== 1的索引列表,将其转换为范围列表,最后是具有重置索引的数据帧列表。现在我们想把它们合并在一起:from functools import reducemerged_df = reduce(lambda left, right: pd.merge(                          left, right, left_index=True, right_index=True), dfs)

慕田峪4524236

我会从列表字典中构建生成的数据帧:resul&nbsp;=&nbsp;pd.DataFrame({i:df.loc[i-20&nbsp;if&nbsp;i&nbsp;>=20&nbsp;else&nbsp;0:&nbsp;i+40&nbsp;if&nbsp;i&nbsp;<=&nbsp;len(df)&nbsp;-&nbsp;40&nbsp;else&nbsp;len(df),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'VXX_FULL'].values&nbsp;for&nbsp;i&nbsp;in&nbsp;df.loc[df.signal&nbsp;==&nbsp;1].index})诀窍是提取一个没有关联索引的numpy数组。.values注意:上面的代码假设原始数据帧的索引只是行号。如果不同,请先使用。reset_index
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python