【问题标题】:Dropping dataframe rows in time series dataframe using pandas使用熊猫在时间序列数据帧中删除数据帧行
【发布时间】:2020-11-15 08:07:06
【问题描述】:

我有以下数据序列作为熊猫数据框

id,start,end,duration
303,2012-06-25 17:59:43,2012-06-25 18:01:29,105
404,2012-06-25 18:01:29,2012-06-25 18:01:55,25
303,2012-06-25 18:01:56,2012-06-25 18:02:06,10
303,2012-06-25 18:02:23,2012-06-25 18:02:44,21
404,2012-06-25 18:02:45,2012-06-25 18:02:51,6
303,2012-06-25 18:02:54,2012-06-25 18:03:17,23
404,2012-06-25 18:03:24,2012-06-25 18:03:41,17
303,2012-06-25 18:03:43,2012-06-25 18:05:51,128
101,2012-06-25 18:05:58,2012-06-25 18:24:22,1104
404,2012-06-25 18:24:24,2012-06-25 18:25:25,61
101,2012-06-25 18:25:25,2012-06-25 18:25:462,21
404,2012-06-25 18:25:49,2012-06-25 18:26:00,11
101,2012-06-25 18:26:01,2012-06-25 18:26:04,3
404,2012-06-25 18:26:05,2012-06-25 18:28:49,164
202,2012-06-25 18:28:52,2012-06-25 18:28:57,5
404,2012-06-25 18:29:00,2012-06-25 18:29:24,24

id 404 应该总是在另一个不同的 id 之后重复出现。

例如,如果上面是房子里的运动传感器,例如404:走廊,202:卧室,303:厨房,201:书房,走廊在中间,然后从卧室到厨房再到书房再回到卧室应该触发202404303404201404202 的顺序,因为人们总是通过走廊 (404) 到达任何房间。我的输出中包含违反此顺序的案例,我想删除此类行。

例如,从下面行上方的 sn-p 数据帧中违反了这一点:

303,2012-06-25 18:01:56,2012-06-25 18:02:06,10
303,2012-06-25 18:02:23,2012-06-25 18:02:44,21

303,2012-06-25 18:03:43,2012-06-25 18:05:51,128
101,2012-06-25 18:05:58,2012-06-25 18:24:22,1104

因此应该删除下面的行(当然我有一个更大的数据集)。

303,2012-06-25 18:02:23,2012-06-25 18:02:44,21
101,2012-06-25 18:05:58,2012-06-25 18:24:22,1104

我试过 shift 和 drop 但结果还是有一些不一致的地方。

df['id_ns'] = df['id'].shift(-1)
df['id_ps'] = df['id'].shift(1)

if (df['id'] != 404):
    df.drop(df[(df.id_ns != 404) & (df.id_ps != 404)].index, axis=0, inplace=True)

我怎样才能最好地解决这个问题?

【问题讨论】:

    标签: python pandas dataframe timestamp time-series


    【解决方案1】:

    使用Series.ne + Series.shift 和可选参数fill_value 创建一个布尔值mask,使用此掩码过滤/删除行:

    mask = df['id'].ne(404) & df['id'].shift(fill_value=404).ne(404)
    df = df[~mask]
    

    结果:

    print(df)
         id                start                  end  duration
    0   303  2012-06-25 17:59:43  2012-06-25 18:01:29       105
    1   404  2012-06-25 18:01:29  2012-06-25 18:01:55        25
    2   303  2012-06-25 18:01:56  2012-06-25 18:02:06        10
    4   404  2012-06-25 18:02:45  2012-06-25 18:02:51         6
    5   303  2012-06-25 18:02:54  2012-06-25 18:03:17        23
    6   404  2012-06-25 18:03:24  2012-06-25 18:03:41        17
    7   303  2012-06-25 18:03:43  2012-06-25 18:05:51       128
    9   404  2012-06-25 18:24:24  2012-06-25 18:25:25        61
    10  101  2012-06-25 18:25:25  2012-06-25 18:25:46        21
    11  404  2012-06-25 18:25:49  2012-06-25 18:26:00        11
    12  101  2012-06-25 18:26:01  2012-06-25 18:26:04         3
    13  404  2012-06-25 18:26:05  2012-06-25 18:28:49       164
    14  202  2012-06-25 18:28:52  2012-06-25 18:28:57         5
    15  404  2012-06-25 18:29:00  2012-06-25 18:29:24        24
    

    【讨论】:

      猜你喜欢
      • 2020-05-12
      • 2017-05-05
      • 2023-04-04
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 2019-06-23
      相关资源
      最近更新 更多