首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更正失去连续性的日期

更正失去连续性的日期
EN

Stack Overflow用户
提问于 2020-07-01 11:58:42
回答 2查看 26关注 0票数 0

我来找你帮忙。问题是,我们有一个数据库(120万条记录),跟踪我们的客户的每月付款日期,但由于一个错误,日期已被设置为每个客户的第一个付款日期。(我在下面举个例子)

代码语言:javascript
复制
    user    fec

0   a   2016-12-08
1   a   2016-12-08
2   a   2016-12-08
3   a   2016-12-08
4   a   2016-12-08
5   b   2017-07-22
6   b   2017-07-22
7   b   2017-07-22
8   b   2017-07-22
9   b   2017-07-22
10  c   2017-04-13
11  c   2017-04-13
12  d   2018-11-26
13  d   2018-11-26
14  d   2018-11-26

现在我们尝试纠正它们,使其看起来如下所示

老实说,我不知道如何解决这个问题,如果这里有人能指导我,我将不胜感激

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-01 13:01:47

如果您只想为每个用户的每个连续日期添加1个月,您可以这样做:

代码语言:javascript
复制
import datetime
import calendar
import pandas as pd

df['fec'] = pd.to_datetime(df['fec'])

def add_months(sourcedate, months):
    month = sourcedate.month - 1 + months
    year = sourcedate.year + month // 12
    month = month % 12 + 1
    day = min(sourcedate.day, calendar.monthrange(year,month)[1])
    return datetime.date(year, month, day)


df['fec'] = df.groupby('user')['fec'].agg(list).apply(lambda x: [add_months(x[0], i) for i in range(len(x))]).explode().values

输出:

代码语言:javascript
复制
   user         fec
0     a  2016-12-08
1     a  2017-01-08
2     a  2017-02-08
3     a  2017-03-08
4     a  2017-04-08
5     b  2017-07-22
6     b  2017-08-22
7     b  2017-09-22
8     b  2017-10-22
9     b  2017-11-22
10    c  2017-04-13
11    c  2017-05-13
12    d  2018-11-26
13    d  2018-12-26
14    d  2019-01-26

不过,这段令人讨厌的一行可能是一种更简单的方法,或者可以分成几个步骤

注-依赖于pandas v1.0.5+

票数 1
EN

Stack Overflow用户

发布于 2020-07-01 12:26:42

如果您愿意将所有日期移至月底:

代码语言:javascript
复制
df['fec'] = (df.groupby('user')['fec']
               .transform(lambda x: pd.date_range(x.min(), freq='M', 
                                                  periods=len(x))
                         )
            )

输出:

代码语言:javascript
复制
   user        fec
0     a 2016-12-31
1     a 2017-01-31
2     a 2017-02-28
3     a 2017-03-31
4     a 2017-04-30
5     b 2017-07-31
6     b 2017-08-31
7     b 2017-09-30
8     b 2017-10-31
9     b 2017-11-30
10    c 2017-04-30
11    c 2017-05-31
12    d 2018-11-30
13    d 2018-12-31
14    d 2019-01-31
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62669467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档