gpt4 book ai didi

python - Pandas 数据框 : omit weekends and days near holidays

转载 作者:行者123 更新时间:2023-12-03 15:57:42 24 4
gpt4 key购买 nike

我有一个带有 DataTimeIndex 和其他一些列的 Pandas 数据框,类似于:

import pandas as pd
import numpy as np

range = pd.date_range('2017-12-01', '2018-01-05', freq='6H')
df = pd.DataFrame(index = range)

# Average speed in miles per hour
df['value'] = np.random.randint(low=0, high=60, size=len(df.index))

df.info()
# DatetimeIndex: 141 entries, 2017-12-01 00:00:00 to 2018-01-05 00:00:00
# Freq: 6H
# Data columns (total 1 columns):
# value 141 non-null int64
# dtypes: int64(1)
# memory usage: 2.2 KB

df.head(10)
# value
# 2017-12-01 00:00:00 15
# 2017-12-01 06:00:00 54
# 2017-12-01 12:00:00 19
# 2017-12-01 18:00:00 13
# 2017-12-02 00:00:00 35
# 2017-12-02 06:00:00 31
# 2017-12-02 12:00:00 58
# 2017-12-02 18:00:00 6
# 2017-12-03 00:00:00 8
# 2017-12-03 06:00:00 30

如何选择或过滤以下条目:
  • 仅限工作日(即周六或周日不包括周末)
  • 不在列表中日期的 N 天内(例如,像“12-25”或“01-01”这样的美国假期)?

  • 我希望有类似的东西:
    df = exclude_Sat_and_Sun(df)

    omit_days = ['12-25', '01-01']
    N = 3 # days near the holidays
    df = exclude_days_near_omit_days(N, omit_days)

    我正在考虑创建一个新列来分解月份和日期,然后将它们与上述 1 和 2 的标准进行比较。但是,我希望使用 DateTimeIndex 获得更多 Pythonic 的东西。

    谢谢你的帮助。

    最佳答案

    使用 Pandas DatetimeIndex.dayofweek 可以轻松完成第一部分属性,它以星期一为 0 开始计算工作日,以星期日为 6 结束。
    df[df.index.dayofweek < 5]只会给你工作日。

    对于第二部分,您可以使用 datetime模块。下面我只举一个日期的例子,即2017-12-25。您可以轻松地将其概括为日期列表,例如通过定义辅助函数。

    from datetime import datetime, timedelta

    N = 3

    df[abs(df.index.date - datetime.strptime("2017-12-25", '%Y-%m-%d').date()) > timedelta(N)]

    这将给出所有超过 N=3 的日期。距离 2017 年 12 月 25 日还有几天。即排除2017-12-22到2017-12-28这7天的间隔。

    最后,您可以使用 & 组合这两个条件。运算符(operator),您可能知道。
    df[
    (df.index.dayofweek < 5)
    &
    (abs(df.index.date - datetime.strptime("2017-12-25", '%Y-%m-%d').date()) > timedelta(N))
    ]

    关于python - Pandas 数据框 : omit weekends and days near holidays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48818653/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com