python - 在 Pandas 中跨分组数据框减去值

标签 python pandas dataframe data-analysis

我有一组 ID 和时间戳,想通过获取最旧/最早时间戳的差值(按 ID 分组)来计算“每个 ID 所用的总时间”。

数据

id   timestamp
1    2018-02-01 03:00:00
1    2018-02-01 03:01:00
2    2018-02-02 10:03:00
2    2018-02-02 10:04:00
2    2018-02-02 11:05:00

预期结果

(我想将增量转换为分钟)

id   delta
1    1
2    62

我有一个 for 循环,但它非常慢(超过 100 万行需要 10 分钟以上)。我想知道这是否可以通过 pandas 函数实现?

# gb returns a DataFrameGroupedBy object, grouped by ID
gb = df.groupby(['id'])

# Create the resulting df
cycletime = pd.DataFrame(columns=['id','timeDeltaMin'])

def calculate_delta():
    for id, groupdf in gb:
        time = groupdf.timestamp
        # returns timestamp rows for the current id

        time_delta = time.max() - time.min()

        # convert Timedelta object to minutes
        time_delta = time_delta / pd.Timedelta(minutes=1) 

        # insert result to cycletime df
        cycletime.loc[-1] = [id,time_delta]
        cycletime.index += 1

下一步想尝试:
- 多处理

最佳答案

首先确保日期时间正确:

df.timestamp = pd.to_datetime(df.timestamp)

现在找出每个id的最大值和最小值之差的分钟数:

import numpy as np

>>> (df.timestamp.groupby(df.id).max() - df.timestamp.groupby(df.id).min()) / np.timedelta64(1, 'm')
id
1     1.0
2    62.0
Name: timestamp, dtype: float64

关于python - 在 Pandas 中跨分组数据框减去值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50297291/

相关文章:

Python itertools - 只创建所有可能产品的一个子集

python-3.x - 在 python 中查看/打印大型数据集的描述性统计数据的好方法?

numpy - Pandas 不在,在和之间

r - 仅当列存在时才执行dplyr操作

python - 读取带有负数的文本文件时出现问题

python - 为什么 random.shuffle(Array) 在多个线程中具有相同的返回值?我该如何纠正这个问题?

python - 在 confluence-kafka-python 中设置主题日志保留

python - Nexus 存储库上的 conda 包

python - 通过连接列在 Python 中格式化时间

scala - Spark Dataframe Join - 重复列(非连接列)