![](/img/trans.png)
[英]Compare datetime index with a datetime column and change the corresponding value in another column
[英]Compare column value at one time to another pandas datetime index
我有一个 pandas dataframe 带有日期时间索引和一些列,“值”。 我想将一天中给定时间的“值”值与同一天不同时间的值进行比较。 例如,将上午 10 点的值与晚上 10 点的值进行比较。
现在我可以使用以下方法获得任何一方的价值:
mask = df[(df.index.hour == hour)]
问题是这会返回一个在小时索引的 dataframe。 所以做 mask1.value - mask2.value 返回 Nan's 因为索引不同。
我可以用一种复杂的方式解决这个问题:
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 来避免硬调用)。
如果缺少某些值(例如上午 10 点),我实际上并不关心某些 nan 是否会进入最终结果。
编辑:
首字母 dataframe:
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
预计 dataframe:
index date newval
0 2020-05-10 18
.....
x 2020-05-30 1
其中 newval 是我上面描述的两个不同时间的减法(例如上午 10 点测量 - 中午 12 点测量所以 23-5 = 18),第二个条目是弥补
日期是单独的列还是索引对我来说都没有关系。
解决方法:
mask1 = df[(df.index.hour == hour1)]
mask2 = df[(df.index.hour == hour2)]
out = mask1.values - mask2.values # df.values returns an np array without indices
result_df = pd.DataFrame(index=pd.daterange(start,end), data=out)
它应该可以省去循环日期的工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.