【问题标题】:Generating number of weeks on Pandas dataframe, based on another Date column根据另一个 Date 列在 Pandas 数据帧上生成周数
【发布时间】:2019-09-20 10:55:42
【问题描述】:

我正在使用以下代码生成如下数据框:

我面临的挑战是周数将在 53.0 结束,然后重置回 1.0,之后周数继续计算。

我需要一个解决方案,其中周数持续到 53.0、54.0 直到日期结束(在第一列中找到)。

import pandas as pd
s = pd.date_range('2006-12-16', '2010-11-26', freq='D').to_series()
s.dt.dayofweek

sample = s.dt.dayofweek
df_sample=sample.to_frame()
df_sample.rename(columns = {0: 'Day_num'}, inplace=True)

df_sample.loc[df_sample.Day_num == 5, 'Day_name'] = 'Saturday'
df_sample.loc[df_sample.Day_num == 6, 'Day_name'] = 'Sunday'
df_sample.loc[df_sample.Day_num == 0, 'Day_name'] = 'Monday'
df_sample.loc[df_sample.Day_num == 1, 'Day_name'] = 'Tuesday'
df_sample.loc[df_sample.Day_num == 2, 'Day_name'] = 'Wednesday'
df_sample.loc[df_sample.Day_num == 3, 'Day_name'] = 'Thursday'
df_sample.loc[df_sample.Day_num == 4, 'Day_name'] = 'Friday'

df_sample = df_sample['Day_name'].astype(str)
df_sample = df_sample.to_frame()

df_sample.reset_index(level=0, inplace=True)
df_sample.rename(columns={'index': 'Date'}, inplace=True)

df_sample['Week_Number'] = df_sample['Date'].dt.week

我觉得有一个更简单的解决方案,并请求有更好方法解决这个问题的人提供任何帮助。

【问题讨论】:

    标签: python-3.x pandas time-series


    【解决方案1】:

    你可以使用:

    s = pd.date_range('2006-12-16', '2010-11-26', freq='D')
    df_sample=s.to_frame()
    df_sample['Day_Name']=s.day_name()
    df_sample=df_sample.reset_index(drop=True).rename(columns={0:'Date'})
    week_range=np.arange(df_sample.index[0],df_sample.index[len(df_sample.index)-1],7)
    df_sample['Week_Number']=df_sample.groupby(pd.cut(df_sample.index,week_range,right=False)).ngroup(ascending=False).sort_values().reset_index(drop=True)+1
    

    【讨论】:

    • 感谢您的回答,但问题是输出,仍将自身从第 53 周重置为 1。我需要一个解决方案,使周数从 53 增加到 54、55、56 和直到日期结束(见第一列)。我不想重新开始周数(第 53 周之后),它需要继续。
    • 只有你注释包含 np.在哪里
    猜你喜欢
    • 2021-06-06
    • 2019-07-10
    • 2020-03-10
    • 2023-03-15
    • 2022-01-20
    • 2020-09-20
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多