【问题标题】:Select row data from every last 5 minutes data from a csv using pandas使用熊猫从 csv 中每隔 5 分钟的数据中选择行数据
【发布时间】:2021-03-30 07:58:07
【问题描述】:

问题陈述:

我有一个 CSV 文件,其中包含 30 分钟的一些记录/行。考虑到我们需要在该 5 分钟间隔内为给定列选择最后一个非空值,我需要创建另一个 CSV,该 CSV 每 5 分钟间隔有一行。

我拥有的样本数据:

DateTime    A          B            C        D
0:00:00 502.8977051 503.2932129 18.44742966 NULL
0:00:00 504.0772095 502.510498  19.74362946 NULL
0:00:03 506.5715942 501.0021973 18.33575058 NULL
0:00:06 506.9558105 500.8230896 18.01424026 NULL
0:00:09 507.637085  502.4645996 18.22068024 NULL
0:01:00 503.7373962 500.0382996 19.65225029 NULL
0:01:03 501.9363098 498.4442139 18.83662987 NULL
0:01:06 501.2966919 498.635498  18.13269043 NULL
0:01:09 501.3804932 499.8033142 18.47451019 NULL
0:01:12 501.2026062 502.9010925 18.27821922 NULL
0:01:15 500.9111938 504.7002869 18.64034081 NULL
0:01:57 499.8942871 503.0549927 19.3476696  NULL
0:02:00 500.7025146 503.311615  18.45420074 NULL
0:02:03 500.3114929 504.3681946 19.56426048 NULL
0:02:06 499.1243896 505.3652039 18.55912018 NULL
0:02:09 499.8727112 507.0862122 19.55410957 NULL
0:02:12 500.377594  507.8305969 18.19698906 NULL
0:03:00 499.7817993 506.4544983 18.27145004 NULL
0:03:03 499.6297913 505.3894958 18.03116035 NULL
0:03:06 499.1319885 503.8894043 19.45935059 NULL
0:03:09 497.7235107 502.6158142 19.35782051 NULL
0:04:00 498.6130066 NULL    19.00246048 NULL
0:04:03 498.3045959 NULL    18.31543922 NULL
0:04:06 498.9266052 NULL    20.20389938 NULL
0:04:09 500.3635864 NULL    18.74864006 NULL
0:04:12 501.0609131 NULL    18.34589958 NULL
0:05:00 502.0812073 502.6158142 19.80117035 NULL
0:06:00 503.0812073 NULL    20.80117035 4
0:07:00 503.0812073 NULL    21.80117035 NULL
0:08:00 NULL    NULL    22.80117035 NULL
0:09:00 NULL    506.6158142 23.80117035 NULL
0:10:00 503.0812073 NULL    24.80117035 NULL
............................................

因此,在合并每最后 5 分钟的数据并从该时间段输出中仅选择最后一个非空值后,输出将如下所示:

DateTime    A          B            C        D
0:05:00 502.0812073 502.6158142 19.80117035 NULL
0:10:00 503.0812073 506.6158142 24.80117035 4
.........

因此输出将每 5 分钟记录一次(0:05:00, 0:10:00, 0:15:00, 0:20:00, .... 我们可以拥有的最大日期范围)

如果任何列在最后 5 分钟间隔内包含所有 NULL 值,那么我们也可以在该间隔的输出中包含 NULL 值。

对如何对这些数据进行分组有什么想法吗?任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas csv aggregate


    【解决方案1】:

    每五分钟获取最后一个非空值:

    df = df.groupby(pd.to_datetime(df.DateTime).dt.ceil("5min"), as_index=False).last()
    

    使用您的示例数据,您将获得 3 行:

    DateTime A B C D
    0 0:00:00 504.077209 502.510498 19.743629 NaN
    1 0:05:00 502.081207 502.615814 19.801170 NaN
    2 0:10:00 503.081207 506.615814 24.801170 4.0

    【讨论】:

    • 感谢您的回答。如果我的 DateTime 列格式为 2021-03-30 00:00:00 并且我希望输出为 DateTime 列格式,如2021-03-30 00:00:00, 2021-03-30 00:05:00, 2021-03-30 00:10:00, 2021-03-30 00:20:00, ..... 等等。
    • 如果 DateTime 列已经有这种格式,同样的代码也可以。
    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2018-12-27
    • 2021-11-20
    • 2017-08-21
    相关资源
    最近更新 更多