Pandas:在每 60 秒的 bin 中仅保留第一行数据

2024-01-25

在 pandas 中仅保留每 60 秒数据箱的第一行的最佳方法是什么?即对于在增加的时间发生的每一行t,我想删除所有出现的行t+60秒。

我知道有一些组合groupby().first()我可能可以使用,但是我见过的代码示例(例如使用pandas.Grouper(freq='60s'))将放弃原始日期时间,转而采用从午夜开始每 60 秒偏移一次的日期时间,而不是我的原始日期时间。

例如,以下内容:

                            time        value
0  2016-05-11 13:00:10.841015028     0.215978
1  2016-05-11 13:02:05.760595780     0.155666
2  2016-05-11 13:02:05.760903860     0.155666
3  2016-05-11 13:02:18.325613076     0.157788
4  2016-05-11 13:02:18.486519052     0.157788
5  2016-05-11 13:02:20.243748548     0.157788
6  2016-05-11 13:02:20.533101692     0.157788
7  2016-05-11 13:02:20.646061652     0.157788
8  2016-05-11 13:02:21.121409820     0.157788
9  2016-05-11 13:04:24.660609068     0.211649
10 2016-05-11 13:04:24.660845612     0.211649
11 2016-05-11 13:04:24.660957596     0.211649
12 2016-05-11 13:04:24.661378132     0.211649
13 2016-05-11 13:04:24.661450628     0.211649
14 2016-05-11 13:04:24.661607044     0.211649

应该变成这样:

                            time        value
0  2016-05-11 13:00:10.841015028     0.215978
1  2016-05-11 13:02:05.760595780     0.155666
3  2016-05-11 13:04:24.660609068     0.211649

UPDATE:谢谢@piRSquared https://stackoverflow.com/questions/39400684/pandas-keeping-only-first-row-of-data-in-each-60-second-bin/39400864?noredirect=1#comment66127957_39400864- 他注意到我之前的解决方案是不正确的。这是另一种尝试:

data:

In [8]: df = pd.DataFrame(dict(time=pd.date_range('2001-01-01', periods=20, freq='9S'), value=np.random.rand(20)))

In [9]: df
Out[9]:
                  time     value
0  2001-01-01 00:00:00  0.440696
1  2001-01-01 00:00:09  0.135540
2  2001-01-01 00:00:18  0.008243
3  2001-01-01 00:00:27  0.389259
4  2001-01-01 00:00:36  0.128253
5  2001-01-01 00:00:45  0.566704
6  2001-01-01 00:00:54  0.386797
7  2001-01-01 00:01:03  0.426411
8  2001-01-01 00:01:12  0.438114
9  2001-01-01 00:01:21  0.918711
10 2001-01-01 00:01:30  0.715565
11 2001-01-01 00:01:39  0.422044
12 2001-01-01 00:01:48  0.199396
13 2001-01-01 00:01:57  0.827872
14 2001-01-01 00:02:06  0.986887
15 2001-01-01 00:02:15  0.305749
16 2001-01-01 00:02:24  0.030092
17 2001-01-01 00:02:33  0.338214
18 2001-01-01 00:02:42  0.773635
19 2001-01-01 00:02:51  0.816478

解决方案:

In [10]: df.groupby((df.time - df.loc[0, 'time']).dt.total_seconds() // 60, as_index=False).first()
Out[10]:
                 time     value
0 2001-01-01 00:00:00  0.440696
1 2001-01-01 00:01:03  0.426411
2 2001-01-01 00:02:06  0.986887

解释:

In [17]: (df.time - df.loc[0, 'time']).dt.total_seconds()
Out[17]:
0       0.0
1       9.0
2      18.0
3      27.0
4      36.0
5      45.0
6      54.0
7      63.0
8      72.0
9      81.0
10     90.0
11     99.0
12    108.0
13    117.0
14    126.0
15    135.0
16    144.0
17    153.0
18    162.0
19    171.0
Name: time, dtype: float64

In [18]: (df.time - df.loc[0, 'time']).dt.total_seconds() // 60
Out[18]:
0    -0.0
1     0.0
2     0.0
3     0.0
4     0.0
5     0.0
6     0.0
7     1.0
8     1.0
9     1.0
10    1.0
11    1.0
12    1.0
13    1.0
14    2.0
15    2.0
16    2.0
17    2.0
18    2.0
19    2.0
Name: time, dtype: float64

旧的错误答案:

In [102]: df[df.time.diff().fillna(pd.Timedelta('60S')) >= pd.Timedelta('60S')]
Out[102]:
                           time     value
0 2016-05-11 13:00:10.841015028  0.215978
1 2016-05-11 13:02:05.760595780  0.155666
9 2016-05-11 13:04:24.660609068  0.211649

解释:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas:在每 60 秒的 bin 中仅保留第一行数据 的相关文章

随机推荐

  • 量角器片状

    我维护一个复杂的 Angular 1 5 x 应用程序 正在使用 Protractor 2 5 x 对其进行 E2E 测试 我在使用这种方法时遇到了一个问题 主要表现为测试看起来不稳定 在一个拉取请求中运行良好的测试在另一拉取请求中失败 这
  • 在 NestJS 中添加 HttpRequest 标头

    我正在尝试在 NestJS 中发出 Http 请求 因为它的灵感来自 Angular 所以我添加了我的标题 import Injectable HttpService from nestjs common const headersRequ
  • JS等待获取=> [对象响应]

    我有这个问题 API Blynk cc 有 2 个输出可能 TRUE 或 FALSE 简单文本 无 JSON 访问 https ip port APIKey isHardwareConnected 时 我得到 TRUE 或 FALSE 当我
  • 从 InternetAddress 打印发件人的电子邮件地址

    这是获取的代码sender和subject使用此代码 我看到显示了正确的主题 但我看到发件人的地址以不同的格式显示 Properties props new Properties props put mail imap host imap
  • 尝试在 AWS Lambda 中运行 Flask 应用程序时出现错误

    我正在尝试使用 AWS Lambda 部署一个在本地运行良好的 Flask 应用程序severless 部署很好 但我无法使用 aws lambda app 我收到一个错误502 Bad Gateway message Internal s
  • 如何生成 yyyymm 值范围? [复制]

    这个问题在这里已经有答案了 我有两个将由用户输入的 yyyymm 值 yyyymm 1 201406 yyyymm 2 201501 我希望能够以递增的月份顺序迭代此范围 for yyyy and mm in the range of yy
  • 如何修复非法指令(核心转储)

    您好 我正在尝试解决此问题 当我运行下面的 python3 Brain py 时 出现此错误 非法指令 核心转储 from imageai Prediction import ImagePrediction import os execut
  • 生产中的 Create-React-App:找不到路由

    我有一个以 Create React App 和 Express js 作为后端的全栈应用程序 开发设置 CRA 在端口 3000 上运行 是由 CRA 的代理实现的 因此我可以将某些路由直接转发到后端 在端口 5000 上运行 proxy
  • 通过notifyDataSetChanged() 没有更改/黑屏;

    我想做这样的事情 同时按下refresh按钮 它将刷新列表 活动代码如下 adapter new TweetAdapter Welcome this tweets users tweetsList setAdapter adapter pr
  • 这个语法是什么意思? (序言)

    我一直在尝试学习 Prolog 并在一些示例代码中遇到了这种语法 solve Hs Hs member h dog Hs 这只是代码的一部分 但我对h dog does 任何帮助将不胜感激 下划线 只是表明该位置有一个值 但我们不关心它 第
  • 使用 BeginInvoke 和 EndInvoke 时,如何避免必须传递/存储委托?

    Edit 将实际问题移至顶部 Update 找到了微软的一个例子 最后添加了一些代码 我的问题是 在同一个委托实例上调用多个 BeginInvoke 调用是否安全 或者我是否必须为每个正在进行的方法调用构造一个新的委托实例 如果我必须为每个
  • Java 8 扩展流

    我正在尝试扩展 Java 8 的 Stream 实现 我有这个界面 public interface StreamStuff
  • git pull 导致“文件取消链接失败”错误

    我正在尝试做一个git pull我遇到了可怕的 取消文件 xxx 链接失败 错误 我已经尝试过 ProcessExplorer 中定义的this https stackoverflow com a 6076796 341611回答 使用 f
  • 访问 ActiveDirectory 的代码的单元测试

    对访问 ActiveDirectory 的应用程序进行单元测试和 或模拟对 AD 的依赖关系的最佳方法是什么 所有必需的类型 例如DirectorySearcher and DirectoryEntry看起来并不容易被嘲笑 我们有类似的方法
  • 使用 htaccess 文件删除 html 扩展名

    我知道这是一个非常常见的话题 但没有一个解决方案适合我 我尝试过几个答案 answer 1 https stackoverflow com questions 15728888 how do i remove html extensions
  • C++ 指针数组:删除还是删除[]?

    考虑以下代码 class Foo Monster monsters 6 Foo for int i 0 i lt 6 i monsters i new Monster virtual Foo 什么是正确的析构函数 this Foo Foo
  • 使用C打开目录

    我接受通过命令行输入的路径 当我做 dir opendir args 1 它不会进入循环 即dir null 如何将命令行输入传递给 dir 指针 void main int c char args DIR dir struct diren
  • 从 IzPack 调用 Java 类

    如何从 IzPack 调用 Java 类的方法 静态方法是可以的 我需要能够传递参数 谢谢你 背景资料 我正在尝试编写一个 IzPack 安装程序 它能够检测以前安装的应用程序版本 在发现它并不真正支持此功能 Windows 除外 后 我认
  • SQLite 删除查询不起作用?

    我有以下代码来从名为 posts 的表中删除一行 由于某种原因 该帖子没有被删除 我还尝试通过命令行手动管理命令 效果很好 我也确信 post id 是正确的并且不为空 因为我也尝试过将其传回并打印它并且 ID 显示正确 我应该提到它不会吐
  • Pandas:在每 60 秒的 bin 中仅保留第一行数据

    在 pandas 中仅保留每 60 秒数据箱的第一行的最佳方法是什么 即对于在增加的时间发生的每一行t 我想删除所有出现的行t 60秒 我知道有一些组合groupby first 我可能可以使用 但是我见过的代码示例 例如使用pandas