【问题标题】:Recode continuous number into continuous dates in Python在 Python 中将连续数字重新编码为连续日期
【发布时间】:2021-04-01 13:13:53
【问题描述】:

我有一个变量看起来像

1,1,1,1, 2,2,2,3,3,3,3,3,4,4,5,6,6,6, ,.....100,100,100
I would like to recode them into dates
1=31.12.2020
2=30.12.2020
3=29.12.2020
...

在我的真实案例中,将有超过 1000 个(或更多)日期需要重新编码,并且还必须考虑闰年。

感谢python pandas是否有一种优雅的方式来处理它。

非常感谢您帮助初学者。

【问题讨论】:

  • pd.TimeStamp('2021/01/01')-pd.to_timedelta(list_of_variable, units='D')

标签: python pandas dataframe recode


【解决方案1】:

Pandas 有一个“date_range”方法,它可以根据开始日期、~'增量'和结束日期返回一系列规则间隔的日期对象。您可以使用它来构建以单天为间隔的日期序列,然后使用它将每个索引(1,1,1,2,2,...)与 date_range 序列中的日期对象相关联。

pandas date_range docs

【讨论】:

    【解决方案2】:

    您可以使用pd.date_rangepd.DateOffset 创建一个简单的字典

    range_var = list(range(1000))
    end_date = pd.Timestamp('31.12.2020') 
    
    date_dict = dict(zip(range_var[::-1], #reverse the list.
             pd.date_range(
             end_date - pd.DateOffset(days=max(range_var)),
             end_date,
             freq='D'
                )
            )
        )
    
    
    
    df = pd.DataFrame.from_dict(date_dict,orient='index').sort_index()
    
    
                 0
    0   2020-12-31
    1   2020-12-30
    2   2020-12-29
    3   2020-12-28
    4   2020-12-27
    ..         ...
    995 2018-04-11
    996 2018-04-10
    997 2018-04-09
    998 2018-04-08
    999 2018-04-07
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-19
      • 2014-03-13
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多