【发布时间】:2021-07-21 10:10:34
【问题描述】:
我有一个类似这样的数据框:
| Timestamp | Value | Type |
|---|---|---|
| 2021-07-03 15:12:00 | 1 | 2.a |
| 2021-07-03 16:11:00 | 1 | 2.a |
| 2021-07-04 14:25:00 | 1 | 2.a |
| 2021-07-04 15:50:00 | 1 | 2.a |
| 2021-07-04 17:07:00 | 2 | 2.c |
| 2021-07-04 18:06:00 | 2 | 2.c |
| 2021-07-04 20:14:00 | 3 | 2.a |
| 2021-07-05 00:00:00 | 3 | 2.a |
df = pd.DataFrame({'Timestamp': ['2021-07-03 15:12:00',
'2021-07-03 16:11:00',
'2021-07-04 14:25:00',
'2021-07-04 15:50:00',
'2021-07-04 17:07:00',
'2021-07-04 18:06:00',
'2021-07-04 20:14:00',
'2021-07-05 00:00:00'],
'Value': [1, 1, 1, 1, 2, 2, 3, 3],
'Type': ['2.a', '2.a', '2.a', '2.a', '2.c', '2.c', '2.a', '2.a']})
其中 TimeStamp 是 DatetimeIndex,Value 是某个整数,Type 是某个字符串。每两行代表一个开始/停止时间对,例如2021-07-03 15:12:00 是某个事件的开始,而 2021-07-03 16:11:00 是同一事件的结束。每对的值和类型应该是相同的信息,但在对之间会有所不同。没有什么能让这个 Value 和 Type 对彼此独一无二。
我正在寻找一种方法来将每两行下采样或压缩成一行,所以我最终会得到类似的结果:
| Start | End | Value | Type |
|---|---|---|---|
| 2021-07-03 15:12:00 | 2021-07-03 16:11:00 | 1 | 2.a |
| 2021-07-04 14:25:00 | 2021-07-04 15:50:00 | 1 | 2.a |
| 2021-07-04 17:07:00 | 2021-07-04 18:06:00 | 2 | 2.c |
| 2021-07-04 20:14:00 | 2021-07-05 00:00:00 | 3 | 2.a |
其中 Start 和 End 将保留 pandas Timestamps,其中一对行的 Value 和 Type 可以被丢弃/删除/忽略,另一个用作 value。
是否有任何 pandas 方法可以做到这一点,或者我应该自己循环遍历行来做类似this 之类的事情?
我找到的最接近的帖子是here,但解决方案不是假设数据集使用groupby 具有唯一的名称和月份吗?在我的数据集中,Value 和 Type 组合没有什么独特之处。
我也考虑过aggregate,但无法弄清楚如何执行此特定操作。
【问题讨论】:
-
如果值和类型相同,如何区分具有相同日期的不同起始对?
-
简单地按它们的顺序(即前两个是一对,接下来的两个是另一个,等等)。如果以任何方式使用这些数据,这些信息就会丢失。