zoukankan      html  css  js  c++  java
  • pandas 通过起始日期获取不同月份对应的投入天数,以及基于多字段判断计算生成新字段

    因为需要,需要处理某人在一段时间内每个月的用时天数,这个好办,基于日期起始值,获取月份,再获取月份对应的天数,需要考虑加入和退出要。

    通过起始日期获取不同月份对应的投入天数

    方法1: 利用pandas的时间处理

    start_d = pd.to_datetime('2021-4-02') # 起始
    end_d = pd.to_datetime(pd.datetime.now()) # 终止
    
    s = pd.Series(index=pd.date_range(start_d, end_d)) # 获取时间范围
    
    df = s.resample('MS').size().rename_axis('Month').reset_index(name='NumDays')
    
    df['Month'] = df['Month'].dt.to_period('m') # 取月份
    # display(df)
    df.Month = df.Month.astype('str')
    month_day_map = df.to_dict()
    
    month_date = dict()
    for i in range(df.shape[0]):
        key = month_day_map.get('Month').get(i)
        value = month_day_map.get('NumDays').get(i)
        month_date[key] = value
    month_date
    

    这段代码理论即可完成需求,当时任务较急,只是直接取了整个项目的最大最小日期,先整体去了月份对应的天数。后续每人单独处理,见方法2。

    方法2:

    def stat_date_month_judge(stat_month_, stat_date_min_, stat_date_max_, days_): 
        if  str(stat_date_max_)[:10][:7] == str(stat_date_min_)[:10][:7]:
            return (stat_date_max_-stat_date_min_).days + 1 
    
        elif stat_month_ == str(stat_date_min_)[:10][:7] :
            return days_ - int(str(stat_date_min_)[:10][8:]) + 1 
            
        elif stat_month_ ==str(stat_date_max_)[:10][:7]:
            return int(str(stat_date_max_)[:10][8:])
        
        else: 
            return days_ 
    
    
    operation_agg_month_['days_cnt'] = operation_agg_month_.apply(lambda fr: stat_date_month_judge(stat_month_=fr.stat_month, 
                                                                                                    stat_date_min_=fr.stat_date_min, 
                                                                                                    stat_date_max_=fr.stat_date_max, 
                                                                                                    days_=fr.days), axis=1)
    

    数据:链接:https://pan.baidu.com/s/1gm6EkZWddD36qiIN4ccClg
    提取码:t9wb

    pandas 多字段判断并计算生成新字段

    见方法2

  • 相关阅读:
    Java(二)
    JS === 关于getElementsByClassName()
    JS === 简易放大镜
    JS === 拖拽盒子
    JS === 实现多个光标跟随事件
    JS === 实现回到顶部
    JS === 实现通过点击td 跳转相应的图片
    final、static关键字
    java面向对象——构造方法
    java面向对象——多态
  • 原文地址:https://www.cnblogs.com/geoffreygao/p/15654760.html
Copyright © 2011-2022 走看看