python - 操纵 Pandas 中的日期

标签 python pandas

由于我有 R 背景,所以我正在尝试理解 Python 中的各种函数。

我面临的问题是:如何根据条件从 pandas 中加减天/年/月?在 R 中,我可以使用 dplyr 包,其中 mutateifelse 将允许我与 lubridate 一起实现它> 包裹。

这是我在 R 中可重现的数据:

df = data.frame(date1=c("2017-07-07", "2017-02-11", "2017-05-22", "2017-04-27")) 

library(lubridate)
df$date1 <- ymd(df$date1) + years(2)
df$day <- wday(df$date1, label=TRUE)

输入

       date1 day
1 2019-07-07 Sun
2 2019-02-11 Mon
3 2019-05-22 Wed
4 2019-04-27 Sat

Task: Add a year to the date if the day is "Sun" and subtract a year from the date if day is "Sat", else IGNORE

R 代码

library(dplyr)

df %>% mutate(newdate = ifelse(df$day == "Sun", date1 %m+% years(1), 
                               ifelse(df$day == "Sat", date1 %m-% years(1), date1))) -> df

df$newdate <- as.Date(df$newdate, origin = "1970-01-01")
df$newday <- wday(df$newdate, label=T)
df

输出

       date1 day    newdate newday
1 2019-07-07 Sun 2020-07-07    Tue
2 2019-02-11 Mon 2019-02-11    Mon
3 2019-05-22 Wed 2019-05-22    Wed
4 2019-04-27 Sat 2018-04-27    Fri

有人可以与我分享如何使用 Pandas 实现此输出吗?

最佳答案

使用DateOffsetSeries.dt.strftime 添加年份和 %a 日期名称:

df = pd.DataFrame({'date1':pd.to_datetime(["2017-07-07", 
                                           "2017-02-11", 
                                           "2017-05-22", 
                                           "2017-04-27"])}) 

df['date1'] += pd.offsets.DateOffset(years=2)
df['day'] = df['date1'].dt.strftime('%a')

要通过多个 bool 掩码设置值,请使用 numpy.select :

masks = [df['day'] == 'Sun', 
         df['day'] == 'Sat']
vals = [df['date1'] + pd.offsets.DateOffset(years=1),
        df['date1'] - pd.offsets.DateOffset(years=1)]

df['newdate'] = np.select(masks, vals, default=df['date1'])
df['newday'] = df['newdate'].dt.strftime('%a')

print (df)
       date1  day    newdate newday
0 2019-07-07  Sun 2020-07-07    Tue
1 2019-02-11  Mon 2019-02-11    Mon
2 2019-05-22  Wed 2019-05-22    Wed
3 2019-04-27  Sat 2018-04-27    Fri

关于python - 操纵 Pandas 中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55846650/

相关文章:

python - Pandas:使用 "and"中两个series的 `where`

python - Pandas reshape 数据框,每行都有一个带有列名和索引的单元格值

python - 在 crontab 上运行 python 脚本导致权限错误,但通过终端运行没问题

python - TensorFlow 神经网络的输出不会改变

python - 在 python 中将特定字段从数据帧转换为字典

python - 多索引中的计算列

python - 是否有可能像在 Matlab 中一样快地在 Python 中计算稀疏矩阵的逆矩阵?

python - 如何强制释放字典使用的内存?

python - 如何在 python 中使用 pandas 获取所有重复项的列表?

python - 将不同列的不同格式的 pandas DataFrame 写入 Excel