使用np.where使用Pandas数据帧中其他行的值



如果满足某些条件,我希望向数据帧添加一个新列,该列将从下一行的列中获取值。

df_psd['f2'] = np.where((df_psd['freq'] != 19.7403), df_psd.iloc[df_psd['index']+1,4], np.nan)

我尝试使用np.where,而不是遍历行,因为数据帧非常大(>2.5M行(。数据帧中的最后一行的"freq"值始终为19.7403。数据帧中有一个名为"index"的列,它等于行号。

当我试图运行上面的行时,我得到了一个索引错误。

IndexError:位置索引器超出的范围

如果我从.iloc方法中删除+1,那么它会运行,但会从同一行而不是下一行返回值。".iloc"方法中的数字4是正确的,因为如果没有+1,它只从错误的行返回正确列中的值。

我已经尝试向np.where术语添加另一个条件,以检查它是否没有接近数据帧的末尾,如下面给出的,但它仍然抛出相同的错误。

df_psd['f2'] = np.where((df_psd['freq'] != 19.7403) & (df_psd['index'] < (len(df_psd)-1)), df_psd.iloc[df_psd['index']+1,4], np.nan)

如果我将返回项更改为仅返回索引,那么我可以看到它为正确的行返回np.nan(即条件工作正常(,并检查数据帧中的最后一行是否是这种情况。

我试着在Stack Overflow上查找类似的问题,并阅读了文档,但不明白为什么会出现索引错误。任何建议都会很有帮助。

@HenryYik建议的解决方案是通过两行来完成。

df_psd['f2'] = df_psd['freq'].shift(-1)
df_psd['f2'] = np.where((df_psd['freq'] == 19.7403), np.nan, df_psd['f2'])

第一行通过创建旧列的移位副本来创建新列。第二行使用np.where来应用适当的条件。

谢谢!

最新更新