【问题标题】:Drop consecutive duplicates which have milliseconds different sampling frequency - Python删除具有毫秒不同采样频率的连续重复 - Python
【发布时间】:2019-04-30 16:03:24
【问题描述】:

数据框如下所示:

0, 3710.968017578125, 2012-01-07T03:13:43.859Z
1, 3710.968017578125, 2012-01-07T03:13:48.890Z
2, 3712.472900390625, 2012-01-07T03:13:53.906Z
3, 3712.472900390625, 2012-01-07T03:13:58.921Z
4, 3713.110107421875, 2012-01-07T03:14:03.900Z
5, 3713.110107421875, 2012-01-07T03:14:03.937Z
6, 3713.89892578125, 2012-01-07T03:14:13.900Z
7, 3713.89892578125, 2012-01-07T03:14:13.968Z
8, 3713.89892578125, 2012-01-07T03:14:19.000Z
9, 3714.64990234375, 2012-01-07T03:14:24.000Z
10, 3714.64990234375, 2012-01-07T03:14:24.015Z
11, 3714.64990234375, 2012-01-07T03:14:29.000Z
12, 3714.64990234375, 2012-01-07T03:14:29.031Z

在某些行中,有些行具有毫秒不同的时间戳,我想删除它们,只保留具有不同秒时间戳的行。有些行的毫秒值和秒值不同,例如从第 9 行到第 12 行,因此,我不能使用a.loc[a.shift() != a]

期望的输出是:

0, 3710.968017578125, 2012-01-07T03:13:43.859Z
1, 3710.968017578125, 2012-01-07T03:13:48.890Z
2, 3712.472900390625, 2012-01-07T03:13:53.906Z
3, 3712.472900390625, 2012-01-07T03:13:58.921Z
4, 3713.110107421875, 2012-01-07T03:14:03.900Z
6, 3713.89892578125, 2012-01-07T03:14:13.900Z
8, 3713.89892578125, 2012-01-07T03:14:19.000Z
9, 3714.64990234375, 2012-01-07T03:14:24.000Z
11, 3714.64990234375, 2012-01-07T03:14:29.000Z

【问题讨论】:

    标签: python pandas dataframe timestamp


    【解决方案1】:

    试试:

    df.groupby(pd.to_datetime(df[2]).astype('datetime64[s]')).head(1)
    

    我希望它是自我解释的。

    【讨论】:

      【解决方案2】:

      您可以使用以下脚本。我没有得到你的数据框列名,所以我发明了下面的列 ['x', 'date_time']

      df = pd.DataFrame([
      (3710.968017578125, pd.to_datetime('2012-01-07T03:13:43.859Z')),
      (3710.968017578125, pd.to_datetime('2012-01-07T03:13:48.890Z')),
      (3712.472900390625, pd.to_datetime('2012-01-07T03:13:53.906Z')),
      (3712.472900390625, pd.to_datetime('2012-01-07T03:13:58.921Z')),
      (3713.110107421875, pd.to_datetime('2012-01-07T03:14:03.900Z')),
      (3713.110107421875, pd.to_datetime('2012-01-07T03:14:03.937Z')),
      (3713.89892578125, pd.to_datetime('2012-01-07T03:14:13.900Z')),
      (3713.89892578125, pd.to_datetime('2012-01-07T03:14:13.968Z')),
      (3713.89892578125, pd.to_datetime('2012-01-07T03:14:19.000Z')),
      (3714.64990234375, pd.to_datetime('2012-01-07T03:14:24.000Z')),
      (3714.64990234375, pd.to_datetime('2012-01-07T03:14:24.015Z')),
      (3714.64990234375, pd.to_datetime('2012-01-07T03:14:29.000Z')),
      (3714.64990234375, pd.to_datetime('2012-01-07T03:14:29.031Z'))], 
          columns=['x', 'date_time'])
      
      • 创建一个列'time_diff'来获取两者之间的差异 当前行和下一行的日期时间
      • 也只能得到这些差异 没有或超过 1 秒
      • 删除临时列 time_diff
      df['time_diff'] = df.groupby('x')['date_time'].diff()
      df = df[(df['time_diff'].isnull()) | (df['time_diff'].map(lambda x: x.seconds > 1))]
      df = df.drop(['time_diff'], axis=1)
      df
      

      【讨论】:

        猜你喜欢
        • 2019-10-19
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 2011-08-09
        • 2019-08-04
        • 2017-03-04
        • 2023-01-02
        相关资源
        最近更新 更多