gpt4 book ai didi

python - 按时间戳和列组合 Pandas DataFrame 行

转载 作者:行者123 更新时间:2023-11-30 22:16:22 26 4
gpt4 key购买 nike

我将以下数据转换为 DataFrame,如下所示

data = [
{"start_ts": "2018-05-14 10:54:33", "end_ts": "2018-05-14 11:54:33", "product": "a", "value": 1},
{"start_ts": "2018-05-14 11:54:33", "end_ts": "2018-05-14 12:54:33", "product": "a", "value": 1},
{"start_ts": "2018-05-14 13:54:33", "end_ts": "2018-05-14 14:54:33", "product": "a", "value": 1},
{"start_ts": "2018-05-14 10:54:33", "end_ts": "2018-05-14 11:54:33", "product": "b", "value": 1}
]

product start_ts end_ts value
0 a 2018-05-14 10:54:33 2018-05-14 11:54:33 1
1 a 2018-05-14 11:54:33 2018-05-14 12:54:33 1
2 a 2018-05-14 13:54:33 2018-05-14 14:54:33 1
3 b 2018-05-14 10:54:33 2018-05-14 11:54:33 1

我试图通过查找产品的连续时间戳字段(其中 start_ts 等于产品的前一行的 end_ts)并将值列相加,将上述 DF 行分桶为一行,如下所示。

预期:

    product start_ts            end_ts              value
0 a 2018-05-14 10:54:33 2018-05-14 12:54:33 2
1 a 2018-05-14 13:54:33 2018-05-14 14:54:33 1
2 b 2018-05-14 10:54:33 2018-05-14 11:54:33 1

我无法使用下面的代码获得预期的上述值

def merge_dates(grp):
date_groups = (grp['start_ts'] != grp['end_ts'].shift())
return grp.groupby(date_groups).agg({'start_ts': 'first', 'end_ts': 'last'})

df.groupby(["product"]).apply(merge_dates)

需要一些建议。任何帮助将不胜感激!

谢谢

最佳答案

我相信这会起作用:

df.groupby(['product', (df.start_ts != df.end_ts.shift()).cumsum()], \
as_index=False).agg({'start_ts':min, 'end_ts':max, 'value':sum})

# product end_ts start_ts value
# 0 a 2018-05-14 12:54:33 2018-05-14 10:54:33 2
# 1 a 2018-05-14 14:54:33 2018-05-14 13:54:33 1
# 2 b 2018-05-14 11:54:33 2018-05-14 10:54:33 1

此方法按产品和 cumsum 进行分组由 df.start_ts != df.end_ts.shift() 创建的 bool 系列; bool 级数用作计数器,每次加一 df.start_ts不等于上一行的 end_ts (即 df.end_ts.shift() ),从而指示何时应开始新组。

关于python - 按时间戳和列组合 Pandas DataFrame 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49969320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com