【发布时间】:2020-07-28 21:20:54
【问题描述】:
我有一个带有日期时间索引和一些列“值”的 pandas 数据框。我想将一天中给定时间的“价值”值与同一天不同时间的值进行比较。例如。比较上午 10 点的值和晚上 10 点的值。
现在我可以使用以下方法获取任一侧的值:
mask = df[(df.index.hour == hour)]
问题是这会返回一个按小时索引的数据框。所以做 mask1.value - mask2.value 会返回 Nan,因为索引不同。
我可以用一种复杂的方式解决这个问题:
out = mask.value.loc["2020-07-15"].reset_index() - mask2.value.loc["2020-07-15"].reset_index() #assuming mask2 is the same as the mask call but at a different hour
但是对于跨越数年的数据集来说,循环是很烦人的。 (显然我可以在循环中使用 timedelta +=1 来避免硬调用)。
我实际上并不关心某些 nan 是否会进入最终结果,例如,上午 10 点,缺少值。
编辑:
初始数据框:
index values
2020-05-10T10:00:00 23
2020-05-10T11:00:00 20
2020-05-10T12:00:00 5
.....
2020-05-30T22:00:00 8
2020-05-30T23:00:00 8
2020-05-30T24:00:00 9
预期的数据框:
index date newval
0 2020-05-10 18
.....
x 2020-05-30 1
newval 是我上面描述的两个不同时间的减法(例如,上午 10 点测量 - 下午 12 点测量,因此 23-5 = 18),第二个条目是组成的
日期是单独的列还是索引对我来说并不重要。
【问题讨论】:
-
欢迎您!您能否提供初始数据框和预期数据框?
-
将初始数据框和预期数据框添加到原始帖子