Python 使用pandas查找两个特定日期之间的月份的最后一天和第一天

Python 使用pandas查找两个特定日期之间的月份的最后一天和第一天,python,pandas,datetime,Python,Pandas,Datetime,我有一个熊猫数据框,有“购买日期”和“出售日期”两列 假设数据帧中的第一行可以如下所示: 购买日期 销售日期 2000-01-04 2000-04-15 我不知道这有多聪明,但它应该有用 从开始日期开始使用 从开始日期开始使用MonthEnd DateOffset创建日期范围 交错 尝试: 输出: 0 2000-01-04 2000-01-04 2000-01-31 2000-01-31 2000-02-01 2000-02-01 2000-02-

我有一个熊猫数据框,有“购买日期”和“出售日期”两列

假设数据帧中的第一行可以如下所示:

购买日期 销售日期 2000-01-04 2000-04-15
我不知道这有多聪明,但它应该有用

  • 从开始日期开始使用
  • 从开始日期开始使用MonthEnd DateOffset创建日期范围
  • 交错


尝试:

输出:

                    0
2000-01-04 2000-01-04
2000-01-31 2000-01-31
2000-02-01 2000-02-01
2000-02-29 2000-02-29
2000-03-01 2000-03-01
2000-03-31 2000-03-31
2000-04-01 2000-04-01
2000-04-15 2000-04-15

您希望初始数据集中的每一行都有一个新的数据框?不确定您的确切需求,但这是一个潜在解决方案的路线图。谢谢@Scott Boston。这就是我一直在寻找的。您是否也知道如何确定一个月的第一天或最后一天是工作日,如果不是,您将选择下一个工作日?例如,如果2000-04-01是一个星期日,您将得到2000-04-02。是的,请使用BMS和BM来表示buinss月初和营业月末。
>>> print(s)
0   2000-01-04
1   2000-01-31
2   2000-02-01
3   2000-02-29
4   2000-03-01
5   2000-03-31
6   2000-04-01
7   2000-04-15
dtype: datetime64[ns]
>>>
from datetime import date
import pandas as pd
import calendar

def main():
    start_date = date(2021, 1, 4)
    end_date = date(2021, 4, 15)

    dates = [start_date]
    for month in range(start_date.month, end_date.month+1):
        first_day_of_month = date(2021, month, 1)
        last_day_of_month = date(2021, month, calendar.monthrange(2021, month)[1])
        print(first_day_of_month)
        print(last_day_of_month)
        dates.append(first_day_of_month)
        dates.append(last_day_of_month)

    dates.append(end_date)

    df = pd.DataFrame({'dates': dates})

    print(df)
if __name__ == "__main__":
    main()
ms = pd.date_range('2000-01-04', '2000-04-15', freq='MS')
me = pd.date_range('2000-01-04', '2000-04-15', freq='M')
df.T.set_index(0).index.union(ms).union(me).to_frame().sort_index()
                    0
2000-01-04 2000-01-04
2000-01-31 2000-01-31
2000-02-01 2000-02-01
2000-02-29 2000-02-29
2000-03-01 2000-03-01
2000-03-31 2000-03-31
2000-04-01 2000-04-01
2000-04-15 2000-04-15