在数据帧中循环以消除数据帧中的巨大跳跃的最快方法

2024-04-19 14:49:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常恼人的测量集,而且经常它只是一个小点,有一个非常高的值,然后是一个非常低的值,与正常模式相比。你知道吗

我正试图摆脱这些,并想知道是否有一种方法可以有效地删除前一点,如果这大于(出于任意的原因20)删除这两个点:

这是我到目前为止,但我有一个巨大的数据集,所以要避免为循环

for i in range(1,len(df1)):

    if abs(df1[TYPE].loc[i]-df1[TYPE].loc[i-1])>20:
                             #update new columns
        df1[TYPE].loc[i-1] = -9999;
        df1[TYPE].loc[i] =-9999;

其中TYPE是我的列变量的名称 这种方法还说:

TypeError: cannot do index indexing on <class `'pandas.tseries.index.DatetimeIndex'> with these indexers [1] of <class 'int'>`

我也在想这些留置权上的一些东西是一种选择——但我不知道如何调整它,这样它就不会一次性完成整个数据帧,而是比较每个位置

df1.insert(0,"newcol1","-9999")
df1['newcol1'] = df1[TYPE].shift() == df1[TYPE]
df1.ix[0, 'newcol1'] = True 

if df1[['newcol1']] > 50:
    print("Jhrjhfh!")
    df1[TYPE]=-9999
    df1[TYPE].shift=-9999

Tags: 数据方法forindexifshifttype模式
1条回答
网友
1楼 · 发布于 2024-04-19 14:49:06

可以将此方法应用于要筛选的每个列。这将过滤掉1帧中出现的光点。你知道吗

max_delta = 50    
delta = df1['colname'].diff().shift(-1).abs()
delta.iloc[-1] = delta.iloc[-2]
df1 = df1[(delta < max_delta)]

相关问题 更多 >