在适用于Python的Pandas中,我有一个数据集,其中包含一列日期时间。我需要创建一个新列,每一行的日期都为下一个星期日。
我尝试了各种方法来尝试使用迭代,然后弄清楚一周中的哪一天,并添加一天直到一天是7天,但是它没有用,我什至不确定如何然后返回日期,而不只是日期。我也不认为最好是这样做。
从日期列返回下一个星期日的列的最佳方法是什么?
答案 0 :(得分:4)
使用熊猫的日期偏移量,例如:
>>> 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)。因此,传递0的所有星期一收益,传递1的所有星期二收益,依此类推。使用它,您可以在一周中的任意一天完成所有操作。
如果您想在最后周日去,只需将+
换成-
即可返回。
(请注意,有很多好处)有关时间序列功能的特定文档可以在这里找到:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html
答案 1 :(得分:0)
功能
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)
答案 2 :(得分:0)
接受的答案是解决方法,但是您也可以为此使用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
答案 3 :(得分:0)
我建议使用日历库
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)
编写此功能并使用