簡體   English   中英

同一日期的兩個不同時間之間的價值差異

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

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