【问题标题】:Pandas return the next Sunday for every row熊猫每排下个星期天返回
【发布时间】:2019-08-31 04:40:53
【问题描述】:

在 Python 的 Pandas 中,我有一个数据集,其中包含一列日期时间。我需要为每一行创建一个新列,其中包含下周日的日期。

我尝试了各种方法来尝试使用 iterrows,然后计算出星期几,并添加一天直到当天是 7,但它没有奏效,我什至不确定我会如何然后返回日期而不是日期。我也不觉得 iterrows 是最好的方法。

从日期列返回下周日的列的最佳方法是什么?

【问题讨论】:

  • help = True if code else False
  • 总是很遗憾 Python 没有 (condition) ? : 语法,这使得嵌套更加简单:P

标签: python pandas date datetime


【解决方案1】:

使用 Pandas 日期偏移量,例如:

>>> pd.to_datetime('2019-04-09') + pd.offsets.Week(weekday=6)
Timestamp('2019-04-14 00:00:00')

例如,这会在一周内更改提供的datetime。这是矢量化的,因此您可以针对这样的系列运行它:

temp['sunday_dates'] = temp['our_dates'] + pd.offsets.Week(weekday=6)
    our_dates  random_data sunday_dates
0  2010-12-31         4012   2011-01-02
1  2007-12-31         3862   2008-01-06
2  2006-12-31         3831   2007-01-07
3  2011-12-31         3811   2012-01-01

注意Week(weekday=INT) 参数在星期一索引为 0,取值从 0 到 6(含)。因此,所有星期一传递 0 收益,所有星期二传递 1 收益,等等。使用它,您可以在一周中的任何一天制作任何您想要的东西。

注意如果您想去最后一个周日,只需将+ 换成- 即可返回。

注意(请注意,非常有帮助)关于时间序列功能的具体文档可以在这里找到:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html

【讨论】:

    【解决方案2】:

    功能

    import datetime
    def datetime_to_next_sunday(original_datetime):
        return original_datetime + datetime.timedelta(days=6-original_datetime.weekday())
    

    返回移到下个星期日的 datetime.datetime。有

    import pandas as pd
    df = pd.DataFrame({'A': ['Foo', 'Bar'],
                       'datetime': [datetime.datetime.now(),
                                    datetime.datetime.now() + datetime.timedelta(days=1)]})
    
    

    以下行应该是工作:

    df['dt_following_sunday'] = df[['datetime']].applymap(datetime_to_next_sunday)
    

    【讨论】:

      【解决方案3】:

      公认的答案是要走的路,但您也可以为此使用Series.apply()pandas.Timedelta(),即:

      df["ns"] = df["d"].apply(lambda d: d + pd.Timedelta(days=(6 if d.weekday() == 6 else 6-d.weekday())))
      

          d                             ns
      0   2019-04-09 21:22:10.886702    2019-04-14 21:22:10.886702
      

      Demo

      【讨论】:

        【解决方案4】:

        我建议使用日历库

         import calendar
         import datetime as dt
        
         #today date 
         now = datetime.datetime.now()
         print (now.year, now.month, now.day, now.hour, now.minute, now.second)
        
         # diffrence in days between current date  and  Sunday
         difday =  7 - calendar.weekday(now.year, now.month, now.day)
        
         # Afterwards next Sunday from today
         nextsunday  = datetime.date(now.year, now.month , now.day + difday)
        
         print(nextsunday)
        

        编写这个函数并使用

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-27
          • 1970-01-01
          • 1970-01-01
          • 2015-04-18
          • 1970-01-01
          • 1970-01-01
          • 2019-07-12
          • 2019-10-24
          相关资源
          最近更新 更多