python - 重新采样 ('W' )奇怪的结果

标签 python pandas datetime time-series

我有一个包含每日日期的 pandas DataFrame,并且在此 DataFrame 中缺少一些日期。我的目标是生成一个新的时间序列,其中仅包含该数据帧中每周的最后一天。例如,如果特定周只有周三和周四条目,则生成的时间序列应仅保留该周的周四数据点。

例如,我尝试了以下操作:

import pandas as pd
import numpy as np

# Create a sample time series with date index
#SUNDAY, MONDAY, TUESDAY, WED, THURSDAY
date_list = ['2023-10-01', '2023-10-02', '2023-10-03', '2023-10-04', '2023-10-05']

# Convert the date list to a pandas datetime index
date_rng = pd.to_datetime(date_list)

data = np.random.rand(len(date_rng))
time_series = pd.Series(data, index=date_rng)


# Resample the time series to weekly frequency and select the last observation for each week
weekly_last = time_series.resample('W').last()

weekly_last['Day of the Week'] = weekly_last.index.day_name()

# Print the result
print(weekly_last)

打印:['SUNDAY', 'SUNDAY'] 而它应该打印 ['SUNDAY', 'THURSDAY']

所以我真的不知道如何实现我想要的?非常感谢您的帮助

最佳答案

我选择通过计算天数差除以 7 来计算周数。我还选择了要减去的日期,以防您不想要周日至周六的周。我还更改了初始日期范围以更好地演示这一点。

# Create a sample time series with date index
#SUNDAY, MONDAY, TUESDAY, WED, THURSDAY
# date_list = ['2023-10-01', '2023-10-02', '2023-10-03', '2023-10-04', '2023-10-05']

date_list = np.arange(np.datetime64('2023-10-01'), np.datetime64('2023-10-31'), np.timedelta64(3, 'D'))

df = pd.DataFrame(date_list)

offset_day = df.loc[0, 0]

df['Day of Week'] = df[0].dt.day_name()
df['Week #'] = (df[0] - offset_day).dt.days // 7

print(df)

print(df.groupby('Week #').last())

关于python - 重新采样 ('W' )奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77391383/

相关文章:

php - 存储到期日期的最佳方式是什么?

python - 编辑列表框中的对象及其来源列表

python - 在 for 循环中附加数据框

python - 在 python 中的 pandas 中匹配数据帧之间的行

ruby-on-rails - 如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

python - 将 python 字符串索引转换为日期时间索引

python - Nosetest初始化错误

python - PyCharm 在有效代码上说 "Property can not be read"

Python pandas/matplotlib 在条形图列上方注释标签

python - 最小组大小的 Pandas groupby