簡體   English   中英

一次將列值與另一次比較 pandas 日期時間索引

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM