【发布时间】:2021-04-01 07:17:11
【问题描述】:
我有以下 Dataframe,索引为 datetime64[ns]。
Side
CollectionTimestamp (CST)
2020-01-06 08:35:00 High
2020-01-06 09:25:00 Low *******
2020-01-06 09:30:00 Low
2020-01-06 09:35:00 Low
2020-01-06 09:40:00 Low
2020-01-06 09:45:00 Low
2020-01-06 09:50:00 Low
2020-01-06 09:55:00 Low
2020-01-06 10:00:00 Low
2020-01-06 10:05:00 Low
2020-01-06 10:10:00 Low
2020-01-06 10:15:00 Low
2020-01-06 10:20:00 Low
2020-01-06 10:25:00 Low
2020-01-06 10:30:00 Low
2020-01-06 10:35:00 Low
2020-01-06 10:40:00 Low
2020-01-06 10:45:00 Low
2020-01-06 10:50:00 Low
2020-01-06 10:55:00 Low
2020-01-06 11:00:00 Low
2020-01-08 08:35:00 High
2020-01-08 10:15:00 Low *******
2020-01-08 10:20:00 Low
2020-01-08 10:30:00 Low
2020-01-08 10:35:00 Low
2020-01-08 10:40:00 Low
2020-01-08 10:45:00 Low
2020-01-08 10:50:00 Low
2020-01-08 10:55:00 Low
2020-01-08 11:00:00 Low
我想要一个新的数据框,其中 df['Side'] 不等于前一行(我已经放置了****,将在新的数据框中)但分组日期作为数据框将具有没有变化的日子。
df.dtypes()
Side object
我试过这段代码:
df = df.loc[(df['Side'] != df['Side'].shift(-1))]
它返回以下内容:
Side
CollectionTimestamp (CST)
2020-01-06 08:35:00 High
2020-01-06 11:00:00 Low
2020-01-08 08:35:00 High
2020-01-08 11:00:00 Low
第一次更改的行不正确,它似乎抓住了最后一次更改?
为什么不能不返回:
Side
CollectionTimestamp (CST)
2020-01-06 09:25:00 Low
2020-01-08 10:15:00 Low
.shift(-1) 不正确吗?
我试图做一个 df.groupby(df.index.date),但这也没有用,所以我想我在这里遗漏了一些东西。
我试过了,但还是不正确:
df['C'] = df['Side'].shift(-1)
df = df.loc[(df['Side'] != df['C'])
【问题讨论】:
-
逻辑对我来说仍然有点不清楚,因为当您真的想分别考虑每个独特的日子时,看起来您正在尝试从整个 DataFrame 创建一个掩码。如果您有一天从高到低多次变化,或者在一天中的某个地方,会发生什么?
-
我想分别考虑每一天,如果从高到低的变化发生在第一次发生,即使之后发生。
-
啊,好吧,让我更新那个答案以反映这一点。因此,如果一天从 Low 开始,并且是 Low-Low-High-Low-Low,您会想要我加粗的值,即高点之后的第一个低点?
-
好的,谢谢。
标签: python pandas dataframe datetime time-series