![](/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.