【问题标题】:Find week number from a date but choosing a start date [duplicate]从日期查找周数但选择开始日期[重复]
【发布时间】:2021-10-27 15:34:52
【问题描述】:

我正在使用 pandas 并有 3 列数据,分别包含一天、一个月和一年。我想将我的数字输入一个循环,以便我可以在我的数据框中创建一个显示周数的新列。我的数据也是从 10 月 1 日开始的,我需要这是我的第一周。

我已尝试使用此代码:

for (a,b,c) in zip(year, month, day):

      print(datetime.date(a, b, c).strftime("%U"))

但这假设第一周是在一月份。 我也不确定如何将循环中的内容分配给新列。我只是打印了 for 循环中的内容来测试它。

谢谢

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    我想这就是你想要的:

    import pandas as pd
    import datetime
    
    # define a function to get the week number according to January 
    get_week_number = lambda y, m, d : int(datetime.date(y, m, d).strftime('%U'))
    
    # get the week number for October 1st; the offset
    offset = get_week_number(2021, 10, 1)
    
    def compute_week_number(year, month, day):
      """
      Function that computes the week number with an offset 
      October 1st becomes week number 1
      """
      return get_week_number(year, month, day) - offset + 1
    
    df = pd.DataFrame({'year':[2021, 2021, 2021], 
                       'month':[10, 10, 10], 
                       'day':[1, 6, 29]})
    
    df['week_number'] = df.apply(lambda x: compute_week_number(x['year'], 
                                                               x['month'],
                                                               x['day']), 
                                                               axis=1)
    

    applyaxis=1 的使用允许为数据帧的每一行调用一个函数,以返回我们要为此行计算的新列的值。

    我使用%(模数)根据您的要求计算新的周数。

    第 39 周变为第 1 周,第 40 周变为第 2 周,依此类推。

    这给出了:

    year month day week_number
    2021 10 1 1
    2021 10 6 2
    2021 10 29 5

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      相关资源
      最近更新 更多