【发布时间】:2018-04-23 03:40:01
【问题描述】:
我将下面的数据转换成如下所示的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)
需要一些建议。任何帮助将不胜感激!
谢谢
【问题讨论】:
-
@BradSolomon 是的,“连续”意味着 start_ts 等于前一行的 end_ts。此外,还更新了描述中的条件。谢谢
-
@BradSolomon 更新了描述部分