【问题标题】:How to iterate over hours of a given day in python?如何在python中迭代给定一天的几个小时?
【发布时间】:2020-03-28 21:47:15
【问题描述】:

我有以下温度读数的时间序列数据:

DT                Temperature
01/01/2019 0:00     41
01/01/2019 1:00     42
01/01/2019 2:00     44
......
01/01/2019 23:00    41
01/02/2019 0:00     44

我正在尝试编写一个函数来比较给定一天的每小时温度变化。任何大于 3 的更改都会增加 quickChange 计数器。像这样的:

def countChange(day):
    for dt in day:
        if dt+1 - dt > 3: quickChange = quickChange+1

我可以调用该函数一天,例如:countChange(df.loc['2018-01-01'])

【问题讨论】:

标签: python pandas dataframe data-science python-datetime


【解决方案1】:

使用Series.diff3 进行比较并通过sum 计算Trues 值:

np.random.seed(2019)

rng = (pd.date_range('2018-01-01', periods=10, freq='H').tolist() +
      pd.date_range('2018-01-02', periods=10, freq='H').tolist())
df = pd.DataFrame({'Temperature': np.random.randint(100, size=20)}, index=rng)  
print (df)
                     Temperature
2018-01-01 00:00:00           72
2018-01-01 01:00:00           31
2018-01-01 02:00:00           37
2018-01-01 03:00:00           88
2018-01-01 04:00:00           62
2018-01-01 05:00:00           24
2018-01-01 06:00:00           29
2018-01-01 07:00:00           15
2018-01-01 08:00:00           12
2018-01-01 09:00:00           16
2018-01-02 00:00:00           48
2018-01-02 01:00:00           71
2018-01-02 02:00:00           83
2018-01-02 03:00:00           12
2018-01-02 04:00:00           80
2018-01-02 05:00:00           50
2018-01-02 06:00:00           95
2018-01-02 07:00:00            5
2018-01-02 08:00:00           24
2018-01-02 09:00:00           28

#if necessary create DatetimeIndex if DT is column
df = df.set_index("DT")

def countChange(day):
    return (day['Temperature'].diff() > 3).sum()

print (countChange(df.loc['2018-01-01']))
4

print (countChange(df.loc['2018-01-02']))
9

【讨论】:

  • 谢谢,因为是和前几个小时比较,我也想考虑一下负面变化。那么 +3 和 -3,我该如何合并呢?
  • @SakibShahriar - 然后将 (day['Temperature'].diff() > 3).sum() 更改为 (day['Temperature'].diff().abs() > 3).sum()
【解决方案2】:

试试 pandas.DataFrame.diff:

df = pd.DataFrame({'dt': ["01/01/2019 0:00","01/01/2019 1:00","01/01/2019 2:00","01/01/2019 23:00","01/02/2019 0:00"], 
                    'Temperature': [41, 42, 44, 41, 44]})

df = df.sort_values("dt")
df = df.set_index("dt")

def countChange(df):
    df["diff"] = df["Temperature"].diff()
    return df.loc[df["diff"] > 3, "diff"].count()

quickchange = countChange(df.loc["2018-01-01"])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2023-03-17
    • 1970-01-01
    • 2012-05-19
    • 2017-06-03
    • 1970-01-01
    • 2021-06-26
    相关资源
    最近更新 更多