【问题标题】:Zero-Variance Removal零方差去除
【发布时间】:2020-05-01 18:16:13
【问题描述】:

我想移除看起来没有差异的传感器?我移除了所有温度为 0 的传感器,并且可以按日期/星期几进行排序,但数据中的更多错误已经曝光。一些传感器有一系列 4.5 和 7.3 的温度记录,在很多天没有变化。我是可重现的代码,所以不想简单地删除 4.5 和 7.3 值

In [1]: df = pd.DataFrame([[A, 2.045], [A, 3.056], [B, 6], [B, 6], columns=['Sen', 'Temp'])

In [2]: df Out[2]: Sen Temp 0 A 2.045 1 A 3.056 2 B 6 3 B 6

所以我使用基本的分组和排序函数对数据进行了分组,以获得如上所述的简单输出。然而。我想从 df.Sen 中删除所有“B”传感器,因为 B 的 df.Temp 中的值的方差等于 0。我只是输入它就感到困惑,但这可能吗?我正在考虑基于方差计算创建一个新列并以这种方式删除,但有没有更简单的解决方案?

Out[2]: Sen Temp 0 A 2.045 1 A 3.05

【问题讨论】:

    标签: python pandas anaconda


    【解决方案1】:

    您可以使用groupby().transform() 来掩盖差异:

    df[df.groupby('Sen').Temp.transform('var') > 0]
    

    输出:

      Sen   Temp
    0   A  2.045
    1   A  3.056
    

    但是,如果您的某些组只有一个有效数据点,这可能会失败。另一方面,由于方差0 表示整个组中只有一个值,您可以使用nunique

    df[df.groupby('Sen').Temp.transform('nunique') > 1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      相关资源
      最近更新 更多