簡體   English   中英

如何在 Pandas 中將 timedeltas 與 resample 或 groupby 相加?

[英]How to sum timedeltas with resample or groupby in Pandas?

我有一個帶有 TIME_IN 和 TIME_OUT 列的 DataFrame(日期時間到秒)。 我想要一個新的 DF,其中包含按日期計算的持續時間總和(TIME_OUT - TIME_IN)。 每天從早上 5 點到凌晨 5 點運行,所以我也對此進行了調整。

這是自學 Pandas 的小型項目的一部分,但我的下一個應用程序將涉及更多,因此效率對我來說是關鍵。

我嘗試了兩種方法(resample 和 groupby),但都有相同的問題: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 中的原始數據示例: 在此處輸入圖像描述

您可以使用分組 object 的agg function 來計算持續時間,如下所示

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})

我認為您的代碼按預期工作?

df['TIME_IN'] = pd.to_datetime(df['TIME_IN'])
df['TIME_OUT'] = pd.to_datetime(df['TIME_OUT'])
df['DATE'] = (df['TIME_IN'] - datetime.timedelta(hours=5)).dt.date
df["DURATION"] = df["TIME_OUT"] - df["TIME_IN"] 
df.groupby("DATE")['DURATION'].sum()

輸入到 groupby

    TIME_IN             TIME_OUT            DATE        DURATION
0   2019-05-06 11:46:51 2019-05-06 11:50:36 2019-05-06  00:03:45
1   2019-05-02 20:47:54 2019-05-02 20:52:22 2019-05-02  00:04:28
2   2019-05-05 07:39:02 2019-05-05 07:46:34 2019-05-05  00:07:32
3   2019-05-04 17:28:52 2019-05-04 17:32:57 2019-05-04  00:04:05
4   2019-05-05 14:08:26 2019-05-05 14:14:30 2019-05-05  00:06:04

分組后的 Output

DATE
2019-05-02   00:04:28
2019-05-04   00:04:05
2019-05-05   00:13:36
2019-05-06   00:03:45

似乎按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM