[英]SELECT BETWEEN to date and two different times in the same date
[英]Difference of value between two different times at the same date
我有一個 dataframe df
如下:
Datetime Value
2020-03-01 08:00:00 10
2020-03-01 10:00:00 12
2020-03-01 12:00:00 15
2020-03-02 09:00:00 1
2020-03-02 10:00:00 3
2020-03-02 13:00:00 8
2020-03-03 10:00:00 20
2020-03-03 12:00:00 25
2020-03-03 14:00:00 15
我想計算每個日期的第一次和每個日期的最后一次的值之間的差異(忽略一個日期內其他時間的值),所以結果將是:
Datetime Value_Difference
2020-03-01 5
2020-03-02 7
2020-03-03 -5
我一直在使用 for 循環執行此操作,但是當我有更大的數據時,它很慢(如預期的那樣)。 任何幫助將不勝感激。
一種解決方案是確保數據按時間排序,按數據分組,然后獲取每天的第一個和最后一個值。 這有效,因為 pandas 將在groupby
期間保留訂單,請參見此處。
df = df.sort_values(by='Datetime').groupby(df['Datetime'].dt.date).agg({'Value': ['first', 'last']})
df['Value_Difference'] = df['Value']['last'] - df['Value']['first']
df = df.drop('Value', axis=1).reset_index()
結果:
Datetime Value_Difference
2020-03-01 5
2020-03-02 7
2020-03-03 -5
Shaido 的方法有效,但由於在非常大的集合上使用 groupby,可能會很慢
另一種可能的方法是從轉換為 int 的日期中獲取差異,並且僅在沒有循環的情況下獲取必要的值。
idx = df.index
loc = np.diff(idx.strftime('%Y%m%d').astype(int).values).nonzero()[0]
loc1 = np.append(0,loc)
loc2 = np.append(loc,len(idx)-1)
res = df.values[loc2]-df.values[loc1]
df = pd.DataFrame(index=idx.date[loc1],values=res,columns=['values'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.