如何在熊猫中用重采样或分组方式对时间增量求和?

问题描述 投票:0回答:1

我有一个带有TIME_IN和TIME_OUT列(日期时间最多为第二个)的DataFrame。我想要一个带有日期的持续时间之和(TIME_OUT-TIME_IN)的新DF。每天从凌晨5点至凌晨5点运行,因此我也对此进行了调整。

这是一个自学熊猫的小型项目的一部分,但是我的下一个应用程序将涉及更多,所以效率对我来说很关键。

我已经尝试了两种方法(重采样和分组方式),但是都存在相同的问题:timedelta DURATION列未求和。

df["DATE"] = pd.to_datetime((df["TIME_IN"]                                    
             - dt.timedelta(hours=hrEnd)).dt.date)
df["DURATION"] = df["TIME_OUT"] - df["TIME_IN"]

dfGroupBy= df.groupby("DATE").sum()

df.setindex("DATE", inplace=True)
dfResample = df.resample("D").sum()

似乎Pandas不像我尝试的那样对timedelta64类型的列求和,因此返回的DataFrame根本不包含DURATION列。最有效的方法是什么?

编辑:这是df中原始数据的示例:enter image description here

python python-3.x pandas
1个回答
0
投票

您可以使用分组对象的agg功能对持续时间求和,如下所示>>

import pandas as pd
import numpy as np

np.random.seed(10)

## Generate dummy data for testing
dt_range = pd.date_range("oct-12-2019", "oct-14-2019", freq="H")

arr = []
while len(arr)<10:
    i,j = np.random.choice(len(dt_range), 2)
    g = np.random.choice(4)
    if j>i:
        arr.append([g, dt_range[i], dt_range[j]])

df = pd.DataFrame(arr, columns=["group", "time_in", "time_out"])


## Solution
df["duration"] = df["time_out"] - df["time_in"]
df.groupby(df["time_in"].dt.date).agg({"duration":np.sum})

© www.soinside.com 2019 - 2024. All rights reserved.