python - 如何获取pandas中两列之间的日期范围信息

标签 python pandas dataframe datetime python-datetime

我有一列日期,我将其分为两列日期:DATE_1DATE_2。我一直在尝试找到一种方法来获取该范围内每个日期的年份周数以及每个日期的星期几,不包括 DATE_2 例如:

Date_1      Date_2
2020-09-27  2020-10-01
2020-12-24  2020-12-29
2020-12-24  2021-01-03
2020-12-28  2021-01-03

我想要得到

Date_1      Date_2      Week                       Days
2020-09-27  2020-10-01  39,40,40,40                Sun,Mon,Tues,Wed
2020-12-24  2020-12-29  52,52,52,53                Thurs,Fri,Sat,Sun,Mon
2020-12-24  2021-01-03  52,52,52,53,53,53,53,53,53 Thurs,Fri,Sat,Sun,Mon,Tues,Wed,Thur,Fri,Sat
2020-12-28  2021-01-03  53,53,53,53,53,53          Mon,Tues,Wed,Thur,Fri,Sat

日期的显示方式可以是全名,也可以是对应特定日期的数值,最重要的是数据存在于某处。

我知道 pandas 有 date_range 但我不知道如何将其合并到我正在寻找的内容中。也许这不是 Pandas 特有的,我不太确定。任何帮助将不胜感激。

最佳答案

在评论中的链接的帮助下,我想出了一个使用 date_range 的解决方案。 :

import pandas as pd

x = {'Date_1': {0: '2020-09-27', 1: '2020-12-24', 2: '2020-12-24', 3: '2020-12-28'},
    'Date_2': {0: '2020-10-01', 1: '2020-12-29', 2: '2021-01-03', 3: '2021-01-03'}}

weekdays = {1: "Mon", 2: "Tues", 3: "Wed", 4: "Thur", 5: "Fri", 6: "Sat", 7: "Sun"}

df = pd.DataFrame(x)

# Creates a new column containing all the days between Date_1 and Date_2
df["Week"] = df.apply(lambda row: pd.date_range(start=row["Date_1"], end=row["Date_2"], freq="D"), axis=1)
# Using the days, we collect the weekdays of the days
df["Days"] = df["Week"].apply(lambda dates: [weekdays.get(date.isocalendar()[2]) for date in dates])
# Finally we gather the week-number for all of the days
df["Week"] = df["Week"].apply(lambda dates: [date.isocalendar()[1] for date in dates])

输出:

       Date_1      Date_2                                          Week                                                        Days
0  2020-09-27  2020-10-01                          [39, 40, 40, 40, 40]                                 [Sun, Mon, Tues, Wed, Thur]
1  2020-12-24  2020-12-29                      [52, 52, 52, 52, 53, 53]                            [Thur, Fri, Sat, Sun, Mon, Tues]
2  2020-12-24  2021-01-03  [52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53]  [Thur, Fri, Sat, Sun, Mon, Tues, Wed, Thur, Fri, Sat, Sun]
3  2020-12-28  2021-01-03                  [53, 53, 53, 53, 53, 53, 53]                       [Mon, Tues, Wed, Thur, Fri, Sat, Sun]

关于python - 如何获取pandas中两列之间的日期范围信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63586005/

相关文章:

python - 如何让 pyodbc 在 Azure Web App 中工作

python - 将包添加到 pylint 异常

python - matplotlib:相同大小的子图?

python - Pandas 创建完美的面板数据,根据条件附加空行

python - 在迭代文档时存储 3 个不同的变量(字典或列表)?

python - 如何获取作为字典的数据帧的列的值

python - numpy:用于数组划分的简明条件语法

python - 在整个数据框中查找最大值和相应的列/索引名称

python - 检查 pandas 数据框日期列的日期格式是否正确?

python-3.x - df.mean()/jupyter/pandas 交替轴输出