【问题标题】:removing discrepancies in the data消除数据中的差异
【发布时间】:2021-11-04 11:04:37
【问题描述】:

我有一个巨大的机器数据框,其中一列逐步上升。但是,由于某些机器故障,有时值会回落到之前的记录。例如,[4,4,4,4,5,5,5,5,5,4,6,6,6,6,6,5 ,7,7,7,7,7]。我希望它是 [4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7]。但是,由于数据框的大小,我不能自己去删除每一行。此外,由于其他原因,对数据进行排序会破坏它。我只是想要一个代码来丢弃这些值并保持升序。

【问题讨论】:

    标签: pandas dataframe sorting


    【解决方案1】:

    使用df.drop,用numpy.diff构建一个布尔掩码:

    df = df.drop(df[np.diff(df['value'], prepend=0) < 0].index)
    

    重要的是,给prepend= 的参数应该是小于(或等于)列中第一个值的数字。特别是,如果您的列可以有负数,那么您应该提供一个较小的负数作为prepend= 参数。

    【讨论】:

    • 非常感谢!
    • @GamaalHeikal 请注意,在存在两个连续差异的情况下,我的答案和 Pygirl 的答案都不起作用,例如 [4,4,4,4,5,5,5,5,5 ,6,6,6,6,6, 4, 5, 7,7,7,7,7]
    • 很高兴知道。我将散点图我的数据并查看结果,希望我没有这种情况。但是,如果你能告诉我这个案例的另一个代码,那就太棒了。
    • @GamaalHeikal 对于这种情况:df[(df.cummax()-df).eq(0)].dropna()
    • for [4,3,1,2,3,3,4,5,5,5,5,6,6,6,6,4,5,3,7,7,7,7,7] --> [4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7]
    【解决方案2】:

    使用shift 和使用greater than or equal to 操作。

    如果当前值大于之前的值,则保留,否则丢弃。

    df = pd.DataFrame([4,4,4,4,5,5,5,5,5,4,6,6,6,6,6,5,7,7,7,7,7], columns=['value'])
    # df = df[df.value.ge(df.value.shift(1).fillna(0))]
    

    编辑:

    从 Scott 那里得到提示:

    df = df[(df.cummax()-df).eq(0)].dropna()
    

    df[(df.cummax()-df).eq(0).values]
    

    df:

        value
    0   4
    1   4
    2   4
    3   4
    4   5
    5   5
    6   5
    7   5
    8   5
    10  6
    11  6
    12  6
    13  6
    14  6
    16  7
    17  7
    18  7
    19  7
    20  7
    

    【讨论】:

    • 非常感谢!
    • @PyGirl 你可以使用df['value'].cummax(),我想。
    • @ScottBoston:感谢您的提示 :)
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2022-01-13
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多