如何解决从日期列中提取当月的天数,返回当月的当前日期
我有一个带有日期列的熊猫数据框
我正在尝试创建一个函数并将其应用于数据框以创建一列,该列返回指定的月/年中的天数
到目前为止,我有:
from calendar import monthrange
def dom(x):
m = dfs["load_date"].dt.month
y = dfs["load_date"].dt.year
monthrange(y,m)
days = monthrange[1]
return days
但是,当我尝试将其应用于日期列时,此方法不起作用。
此外,我希望能够确定当前日期是否为当前月份,如果是,则返回截至该月当前日期的天数,而不是整个月份的天数。
我不确定执行此操作的最佳方法,我所能想到的就是对照日期时间的今天检查月份/年份,然后使用增量
预先感谢
解决方法
对于问题的 pt.1 ,您可以强制转换为pd.Period
并检索days_in_month
:
import pandas as pd
# create a sample df:
df = pd.DataFrame({'date': pd.date_range('2020-01','2021-01',freq='M')})
df['daysinmonths'] = df['date'].apply(lambda t: pd.Period(t,freq='S').days_in_month)
# df['daysinmonths']
# 0 31
# 1 29
# 2 31
# ...
对于 pt.2 ,您可以将时间戳记为“现在”,并为日期列(即年/月小于“现在”)创建布尔掩码。然后计算掩码返回True的部分的daysinmonth列的总和。反转该系列的顺序,以立即获取到的日期。
now = pd.Timestamp('now')
m = (df['date'].dt.year <= now.year) & (df['date'].dt.month < now.month)
df['daysuntilnow'] = df['daysinmonths'][m].cumsum().iloc[::-1].reset_index(drop=True)
评论后更新:要获取每月经过的天数,可以执行
df['dayselapsed'] = df['daysinmonths']
m = (df['date'].dt.year == now.year) & (df['date'].dt.month == now.month)
if m.any():
df.loc[m,'dayselapsed'] = now.day
df.loc[(df['date'].dt.year >= now.year) & (df['date'].dt.month > now.month),'dayselapsed'] = 0
输出
df
Out[13]:
date daysinmonths daysuntilnow dayselapsed
0 2020-01-31 31 213.0 31
1 2020-02-29 29 182.0 29
2 2020-03-31 31 152.0 31
3 2020-04-30 30 121.0 30
4 2020-05-31 31 91.0 31
5 2020-06-30 30 60.0 30
6 2020-07-31 31 31.0 31
7 2020-08-31 31 NaN 27
8 2020-09-30 30 NaN 0
9 2020-10-31 31 NaN 0
10 2020-11-30 30 NaN 0
11 2020-12-31 31 NaN 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。