Skip to main content
 首页 » 编程设计

python之在 Pandas 中计算每月的最后一个星期五

2025年05月04日13zhenyulu

我写了这个函数来获取这个月的最后一个星期四

def last_thurs_date(date): 
    month=date.dt.month 
    year=date.dt.year 
     
    cal = calendar.monthcalendar(year, month) 
    last_thurs_date = cal[4][4] 
    if month < 10: 
        thurday_date = str(year)+'-0'+ str(month)+'-' + str(last_thurs_date) 
    else: 
        thurday_date = str(year) + '-' + str(month) + '-' + str(last_thurs_date) 
    return thurday_date 

但它不适用于 lambda 函数。

datelist['Date'].map(lambda x: last_thurs_date(x)) 

日期列表在哪里

datelist = pd.DataFrame(pd.date_range(start = pd.to_datetime('01-01-2014',format='%d-%m-%Y') 
                                      , end = pd.to_datetime('06-03-2019',format='%d-%m-%Y'),freq='D').tolist()).rename(columns={0:'Date'}) 
datelist['Date']=pd.to_datetime(datelist['Date']) 

请您参考如下方法:

Jpp 已经添加了解决方案,但只是为了添加一个稍微更易读的格式化字符串 - 请参阅 awesome website .

import calendar 
def last_thurs_date(date): 
    year, month = date.year, date.month 
    cal = calendar.monthcalendar(year, month) 
    # the last (4th week -> row) thursday (4th day -> column) of the calendar 
    # except when 0, then take the 3rd week (February exception) 
    last_thurs_date =  cal[4][4] if cal[4][4] > 0 else cal[3][4]  
    return f'{year}-{month:02d}-{last_thurs_date}' 

还添加了一些逻辑 - 例如你得到了 2019-02-0,因为二月没有整整 4 周。