首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用小时数据分析数据

用小时数据分析数据
EN

Stack Overflow用户
提问于 2022-11-08 10:41:58
回答 2查看 41关注 0票数 0

我想用几天的每小时数据来分析数据,例如df:

代码语言:javascript
复制
      DATE      TIME  Threshold  Value
2022-11-04  02:00:00         10      9
2022-11-04  03:00:00         11     10  
2022-11-04  04:00:00         10     11  
2022-11-04  06:00:00         12     11  
2022-11-04  05:00:00         12     12  
2022-11-04  07:00:00         10     11  
2022-11-04  08:00:00         11     10  
2022-11-04  09:00:00         11      9  
2022-11-04  10:00:00         12      9  
2022-11-04  11:00:00         10     10  
2022-11-04  12:00:00         10     10
... 
2022-11-05  01:00:00         10      9
2022-11-05  02:00:00         11     10 
...

现在,我想根据阈值/值和时间来检查数据。假设我对时间"08:00:00“的值感兴趣,如果上一次"04:00:00”的阈值是10。为了找到可能的模式,我可能还会在将来查看其他组合。

我的做法是:

  • 创建一个新的dataframe df_2,其所有切片为04:00:00,value =10
  • 创建一个新的dataframe df_3,其所有切片为08:00:00
  • 合并df_2和df_3,并仅选择同一天的时间= 04:00:00 :00之前的行。

这似乎有点麻烦,我想知道是否有更实际的方法来做到这一点。也许有人能提出一个更有效的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-08 11:10:59

首先,让DatetimeInex:

代码语言:javascript
复制
date_idx=df.iloc[:, :2].astype('str').apply(lambda x: pd.to_datetime(' '.join(x)), axis=1)

并使在4H之前具有阈值的new

并将结果提交给df1

代码语言:javascript
复制
df1 = (df.set_index(date_idx)
       .drop(['DATE', 'TIME'], axis=1)
       .sort_index()
       .assign(new=df1.shift(freq='4H')['Threshold']))

输出(df1):

代码语言:javascript
复制
                    Threshold   Value   new
2022-11-04 02:00:00 10           9      NaN
2022-11-04 03:00:00 11          10      NaN
2022-11-04 04:00:00 10          11      NaN
2022-11-04 05:00:00 12          12      NaN
2022-11-04 06:00:00 12          11      10.0
2022-11-04 07:00:00 10          11      11.0
2022-11-04 08:00:00 11          10      10.0
2022-11-04 09:00:00 11           9      12.0
2022-11-04 10:00:00 12           9      12.0
2022-11-04 11:00:00 10          10      10.0
2022-11-04 12:00:00 10          10      11.0

在08:00过滤数据:

代码语言:javascript
复制
df1.at_time('08:00')

产出:

代码语言:javascript
复制
                    Threshold Value new
2022-11-04 08:00:00 11        10    10.0

检查或筛选Valuenew

票数 1
EN

Stack Overflow用户

发布于 2022-11-08 14:58:41

这里有一种方法

代码语言:javascript
复制
out=(df.loc[
    (df['TIME'].isin(['04:00:00','08:00:00']) &   # choose rows where time is 4:00 or 8:00
     df['DATE'].isin(                             # and date where 
         df.loc[df['TIME'].eq('04:00:00') &       # time is 04:00:00
                df['Threshold'].eq(10)]['DATE'])  # and Threshold is 10
)])
out
代码语言:javascript
复制
     DATE       TIME    Threshold   Value
2   2022-11-04  04:00:00    10      11
6   2022-11-04  08:00:00    11      10

或者,与上述相同,只需选择时间eq到08:00:00。

代码语言:javascript
复制
out=(df.loc[
    (df['TIME'].isin(['08:00:00']) &
     df['DATE'].isin(
         df.loc[df['TIME'].eq('04:00:00') & 
                df['Threshold'].eq(10)]['DATE'])
)])
out
代码语言:javascript
复制
          DATE  TIME    Threshold   Value
6   2022-11-04  08:00:00    11      10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74359356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档