基于Pandas DataFrame中的特定日期时间值聚合函数

8oomwypt  于 2023-04-04  发布在  其他
关注(0)|答案(1)|浏览(138)

我有一个数据集,每小时有不同火车站的日期输入/输出。其中一个问题是火车站的一些运营时间导致时间增量的不规则间隔(即一些火车在下午5:30关闭,因此一些行将具有05:30:00的奇数时间戳,而所有其他行在时间戳的分钟部分没有任何值)。
我想将数据标准化为每小时的间隔,并想折叠这些不规则的30分钟时间戳中的一些(因此,时间戳05:30:00的车站的任何进入/退出都应与时间戳05:00:00的进入/退出相加)。
有没有一种方法可以使用groupby/aggregate函数来执行此操作?
下面提供的是一个示例 Dataframe ,沿着我希望实现的最终结果:

df = pd.DataFrame(
    {'Date Time':pd.to_datetime(['2023-01-01 00:00:00', '2023-01-01 00:00:00', '2023-01-01 00:00:00', '2023-01-01 00:30:00', 
                                                '2023-01-01 00:30:00', '2023-01-01 00:30:00',  '2023-01-01 01:00:00', 
                                                '2023-01-01 01:00:00', '2023-01-01 01:00:00']),
     'Station':['Station A', 'Station B', 'Station C', 'Station A', 'Station B', 'Station C','Station A', 'Station B', 'Station C'],
     'Entries':[1, 2, 3, 1, 2, 3, 1, 2, 3],
     'Exits':[1, 2, 3, 1, 2, 3, 1, 2, 3]}
)

输出:
| 日期时间|车站|参赛作品|出口|
| --------------|--------------|--------------|--------------|
| 2023年1月1日00时00分|A站|1|1|
| 2023年1月1日00时00分|B站|第二章|第二章|
| 2023年1月1日00时00分|C站|三|三|
| 2019 -01- 22 00:00:00|A站|1|1|
| 2019 -01- 22 00:00:00|B站|第二章|第二章|
| 2019 -01- 22 00:00:00|C站|三|三|
| 2023-01-01 01:00:00|A站|1|1|
| 2023-01-01 01:00:00|B站|第二章|第二章|
| 2023-01-01 01:00:00|C站|三|三|
预期输出:
| 日期时间|车站|参赛作品|出口|
| --------------|--------------|--------------|--------------|
| 2023年1月1日00时00分|A站|第二章|第二章|
| 2023年1月1日00时00分|B站|四|四|
| 2023年1月1日00时00分|C站|六|六|
| 2023-01-01 01:00:00|A站|1|1|
| 2023-01-01 01:00:00|B站|第二章|第二章|
| 2023-01-01 01:00:00|C站|三|三|

7eumitmz

7eumitmz1#

您可以显式地只对Date Time列的相关部分进行分组-在本例中是dt.datedt.hour
first可用于聚合内的“非求和”列。

# group by date, hour, and station name

groups = [
   df["Date Time"].dt.date, df["Date Time"].dt.hour, "Station"
]

(df.groupby(groups, as_index=False)
   .agg({
      "Date Time": "first",
      "Station": "first",
      "Entries": sum,
      "Exits": sum,
    })
 )
Date Time    Station  Entries  Exits
0 2023-01-01 00:00:00  Station A        2      2
1 2023-01-01 00:00:00  Station B        4      4
2 2023-01-01 00:00:00  Station C        6      6
3 2023-01-01 01:00:00  Station A        1      1
4 2023-01-01 01:00:00  Station B        2      2
5 2023-01-01 01:00:00  Station C        3      3

相关问题