我有几天时间,指数是基于周一至周五30分钟的数据。可能会有一些日期的遗漏(可能是因为假期)。但我想在过去的一周里,从高栏到低栏,找到最高值和最低值。就像我今天在计算,所以前一周的高低都被标记为黄色的附加图像。
尝试使用滚动,重采样,但有些如何不工作。有人能帮上忙吗
发布于 2022-07-19 08:19:55
您确实应该将示例数据添加到您的问题中(我指的是一段代码/文本,这些代码/文本可以很容易地用于创建数据,以说明建议的解决方案是如何工作的)。
这里有个建议。使用df,您的数据With和带有日期时间(而不是字符串)的列datatime:
df["week"] = (
df["datetime"].dt.isocalendar().year.astype(str)
+ df["datetime"].dt.isocalendar().week.astype(str)
)
mask = df["high"] == df.groupby("week")["high"].transform("max")
df = df.merge(
df[mask].rename(columns={"low": "high_low"})
.groupby("week").agg({"high_low": "min"}).shift(),
on="week", how="left"
).drop(columns="week")week列添加到df (年份+周),以便按周分组。high提取具有每周最大mask s的行(可能有一个以上的行,为期一周)。lows (列名为high_low)的每周最小值,并将其一次用于获取前一周的值,并将其.merge为df。如果列datetime不包含日期时间:
df["datetime"] = pd.to_datetime(df["datetime"])发布于 2022-07-18 10:41:40
如果我的理解是正确的,解决办法应该是
https://stackoverflow.com/questions/73019980
复制相似问题