【问题标题】:Remove following rows that are above or under by X amount from the current row['x']从当前行中删除高于或低于 X 数量的以下行['x']
【发布时间】:2022-01-03 00:26:18
【问题描述】:

我正在计算相关性,我需要过滤的数据框。

我希望从数据帧中删除当前行下的行,这些行从第一行开始高于或低于 X 数量,并一直循环遍历数据帧直到最后一行。

示例:

df['y'] 的值为 50,51,52,53,54,55,70,71,72,73,74,75 如果 X = 10,它将从 50 开始,并在 10+- 范围内看到 51、52、53、54、55 并删除行。 70 将保留,因为它不在该范围内,并且相同的测试将在 70 重新开始,其中 71、72、73、74、75 和相应的行将被删除

如果 X=10 的过滤器因此会给我们留下包括 df 的 50,75 在内的行。

它会给我留下一个干净的数据框,删除与基本上相同观察期的第一个实例相关联的实例。我尝试编写一个循环来做到这一点,但此时我得到了错误的结果并且绝望了。希望有人能纠正错误或指出正确的方向。

df6['index'] = df6.index
df6.sort_values('index')
boom = len(dataframe1.index)/3


#Taking initial comparison values from first row
c = df6.iloc[0]['index']
#Including first row in result
filters = [True]

#Skipping first row in comparisons
for index, row in df6.iloc[1:].iterrows():
    if  c-boom <= row['index'] <= c+boom:
        filters.append(False)
    else:
        filters.append(True)
        # Updating values to compare based on latest accepted row
        c = row['index']

df2 = df6.loc[filters].sort_values('correlation').drop('index', 1)
df2

OUTPUT BEFORE

OUTPUT AFTER

【问题讨论】:

    标签: python pandas dataframe loops


    【解决方案1】:

    IIUC,您的主要问题是过滤阈值内的连续值。

    您可以使用自定义函数作用于系列 (=column) 以返回有效索引列表:

    def consecutive(s, threshold = 10):
        prev = float('-inf')
        idx = []
        for i, val in s.iteritems():
            if val-prev > threshold:
                idx.append(i)
                prev = val
        return idx
    

    使用示例:

    import pandas as pd
    df = pd.DataFrame({'y': [50,51,52,53,54,55,70,71,72,73,74,75]})
    df2 = df.loc[consecutive(df['y'])]
    

    输出:

        y
    0  50
    6  70
    

    变体

    如果您希望函数返回布尔索引器,这里有一个变体:

    def consecutive(s, threshold = 10):
        prev = float('-inf')
        idx = [False]*len(s)
        for i, val in s.iteritems():
            if val-prev > threshold:
                idx[i] = True
                prev = val
        return idx
    

    【讨论】:

    • 谢谢它的工作,我添加了一个变量,该变量是我想用于测试整个数据集的相关性的周期长度的 1/3。这样,它仍然可以适应任何类型的数据集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2012-09-28
    • 2019-10-19
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多