在设定的时间段内选择具有最早时间值的数据框行

Posted

技术标签:

【中文标题】在设定的时间段内选择具有最早时间值的数据框行【英文标题】:Selecting the data frame row with the earliest time value for a set period 【发布时间】:2021-08-08 14:24:45 【问题描述】:

我在 r 中有一个 df,其中包含许多采用以下格式的记录,以及 12 小时内的“arrival_time”值。

id arrival_time wait_time_value
1 2020-02-20 12:02:00 10
2 2020-02-20 12:04:00 5
99900 2020-02-20 23:47:00 8
10000 2020-02-20 23:59:00 21

我想创建一个新的 df,它在到达时间段的每个 15 分钟时隙中都有一行,以及该时隙中最早到达时间的记录的 wait_time_value。因此,在上面的示例中,新 df 的第一行和最后一行将如下所示:

id period_start wait_time_value
1 2020-02-20 12:00:00 10
48 2020-02-20 23:45:00 8

我已经使用下面的代码来实现每 15 分钟范围内所有记录的平均等待时间,但我不确定如何选择最早记录的值?


df$period_start <- align.time(df$arrival_time- 899, n = 60*15)

avgwait_df <- aggregate(wait_time_value ~ period_start, df, mean)

【问题讨论】:

您能否提供更易于复制的可重现格式的数据?阅读how to give a reproducible example 【参考方案1】:

DataFrame.resampleGroupBy.first 一起使用,仅删除NaNs 并转换为DataFrame

df['arrival_time'] = pd.to_datetime(df['arrival_time'])

df = (df.resample('15Min', on='arrival_time')['wait_time_value']
        .first()
        .dropna()
        .reset_index(name='wait_time_value'))
print (df)
         arrival_time  wait_time_value
0 2020-02-20 12:00:00             10.0
1 2020-02-20 23:45:00              8.0

【讨论】:

【参考方案2】:

使用dplyr:

df %>%
   group_by(period_start) %>%
   summarise(wait_time = min(wait_time_value))

【讨论】:

这不会提供最小的wait_time_value而不是最早到达时间的值吗? 我从你的问题的理解是这就是你想要的。您可以通过在min 函数中将wait_time_value 替换为arrival_time 来获得最早到达时间。

以上是关于在设定的时间段内选择具有最早时间值的数据框行的主要内容,如果未能解决你的问题,请参考以下文章

Python、Pandas 和 for 循环:根据与列表值的匹配填充数据框行

根据“小时”日期时间选择 Pandas 数据框行

如何检查熊猫数据框行在各个列中是不是具有某些值,可扩展性

熊猫过滤具有特定年份的数据框行

基于当前字段值的MS访问表单组合框行源

如何过滤数据框行并将总和保存在新行中?