我有一个带有索引列=的pandas DataFrame date.
输入:
value
date
1986-01-31 22.93
1986-02-28 15.46
Run Code Online (Sandbox Code Playgroud)
我想把日期定在那个月的第一天
输出:
value
date
1986-01-01 22.93
1986-02-01 15.46
Run Code Online (Sandbox Code Playgroud)
我尝试了什么:
df.index.floor('M')
ValueError: <MonthEnd> is a non-fixed frequency
Run Code Online (Sandbox Code Playgroud)
这可能是因为df是由
df = df.resample("M").sum()(此代码的输出是问题开头的输入)生成的
我也试过了df = df.resample("M", convention='start').sum().但是,它不起作用.
我知道在R中,很容易打电话floor(date, 'M').
指定日期时:
datetime.datetime(2011, 8, 15)
Run Code Online (Sandbox Code Playgroud)
我如何才能知道这是本月的第三周?
如果我想要这个约会怎么办?
datetime.datetime(2011, 2, 28) //should return 4
datetime.datetime(2011, 8, 29) //should return 5
Run Code Online (Sandbox Code Playgroud)
据我所知,如果给定日期是闰年,只有2月有4周(bissextile)
我的问题与以下不同:
问题1:在一个月的周大熊猫 Quesiton2:这个月的周数
上述问题涉及假设一周有 7 天。它试图计算每周 7 天的数量。我的数据由(工作日)每日价格组成,由于市场因假期休市,因此有时可能会缺少一周中的几天。
我的问题是如何找到给定日期的月份中的第几周。注意我强调了“给定日期”,因为这个过程每天都在处理,所以任何展望月底之前的答案都可能不起作用。
我的尝试是展望不是最佳的:
def is_third_friday(s):
d = datetime.datetime.strptime(s, '%Y-%m-%d')
return d.weekday() == 5 and 15 <= d.day <= 21
dow = deepcopy(data['Close'] * np.nan).to_frame()
dow.columns = ['OpexFriday']
dow['next_date'] = pd.Series([str(i.date() + datetime.timedelta(days=1)) for i in dow.index]).values
dow['OpexFriday'] = pd.Series([is_third_friday(str(i)) for i in dow['next_date']]).values
dow['OpexWeek'] = (dow['OpexFriday'] * 1).replace(0, np.nan).fillna(method='bfill', limit=4).replace(np.nan, 0) == True
Run Code Online (Sandbox Code Playgroud)
我不知道如何提供一些样本,data但是如果您转到“https://aroussi.com/post/python-yahoo-finance”页面并使用作者 yfinance 包,您将能够获得一些价格数据与。
上面的函数将找到该月的第 3 周(全部为 True)。此外,它还将设置该周的星期五。
如果您发现该问题有任何问题或是否重复,请告诉我。我已经搜索了一段时间以寻找解决方案。