簡體   English   中英

在 pandas 中查找連續分鍾

[英]Finding consecutive minutes in pandas

我正在關注這篇文章 - Pandas 輸出日期、開始和結束時間以及給定日期時間連續性的事件狀態

測試連續小時的示例在帖子中。 我需要在連續幾分鍾內進行測試。 我將代碼行從 3600 修改為 60(小時到分鍾)

#test consecutive minutes
df['g'] = df['Date'].diff().dt.total_seconds().div(60).ne(1)

最終結果在任何連續分鍾內返回全部 True。

Date                  meter    g
2009-02-13 13:23:00   53.49    True
2009-02-13 13:24:00   64.91    True
2009-02-13 13:25:00   32.04    True
2009-02-13 13:26:00   45.94    True
2009-02-13 15:45:00   45.94    True

結果應該在哪里

Date                  meter    g
2009-02-13 13:23:00   53.49    True
2009-02-13 13:24:00   64.91    False
2009-02-13 13:25:00   32.04    False
2009-02-13 13:26:00   45.94    False
2009-02-13 15:45:00   45.94    True

這里有什么問題?

您的代碼問題可能是由於浮點近似造成的? 如果您將值四舍五入,這將得到解決:

pd.to_datetime(df['Date']).diff().dt.total_seconds().div(60).round().ne(1)

但是,有一個更好的方法,使用 Timedelta 比較屬性:

df['g'] = pd.to_datetime(df['Date']).diff().ne('1min')

輸出:

                  Date  meter      g
0  2009-02-13 13:23:00  53.49   True
1  2009-02-13 13:24:00  64.91  False
2  2009-02-13 13:25:00  32.04  False
3  2009-02-13 13:26:00  45.94  False
4  2009-02-13 15:45:00  45.94   True

對於您的第一個問題(小組的第一個和最后一個):

forward = pd.to_datetime(df['Date']).diff().ne('1min')
reverse = (-pd.to_datetime(df['Date']).diff(-1)).ne('1min')
df['g'] = forward|reverse

輸出:

                  Date  meter      g
0  2009-02-13 13:23:00  53.49   True
1  2009-02-13 13:24:00  64.91  False
2  2009-02-13 13:25:00  32.04  False
3  2009-02-13 13:26:00  45.94   True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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