Python 使用pandas查找两个特定日期之间的月份的最后一天和第一天
我有一个熊猫数据框,有“购买日期”和“出售日期”两列 假设数据帧中的第一行可以如下所示: 购买日期 销售日期 2000-01-04 2000-04-15Python 使用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-
我不知道这有多聪明,但它应该有用
- 从开始日期开始使用
- 从开始日期开始使用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