首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于大熊猫条件的日差计算

基于大熊猫条件的日差计算
EN

Stack Overflow用户
提问于 2019-06-27 21:37:35
回答 1查看 125关注 0票数 1

假设我有一个数据文件,如下所示:

代码语言:javascript
复制
pd.DataFrame({'category': [1,1,1,2,2,2,3,3,3,4],
              'date_start': ['2018-04-09','2018-05-03', '2018-06-22', '2018-09-21', '2018-12-01', '2018-12-24', '2018-02-24', '2018-03-31','2018-08-01', '2018-01-29'],
              'order_start': [1,2,3,1,2,3,1,2,3,1]})
Out[67]: 
   category  date_start  order_start
0         1  2018-04-09            1
1         1  2018-05-03            2
2         1  2018-06-22            3
3         2  2018-09-21            1
4         2  2018-12-01            2
5         2  2018-12-24            3
6         3  2018-02-24            1
7         3  2018-03-31            2
8         3  2018-08-01            3
9         4  2018-01-29            1

如您所见,order_start取决于类别和date_start。这只是按类别开始的顺序。

创建一个新列的最简单/最有效的方法是什么?我想要这样的东西:

代码语言:javascript
复制
pd.DataFrame({'category': [1,1,1,2,2,2,3,3,3,4],
              'date_start': ['2018-04-09','2018-05-03', '2018-06-22', '2018-09-21', '2018-12-01', '2018-12-24', '2018-02-24', '2018-03-31','2018-08-01', '2018-01-29'],
              'order_visit': [1,2,3,1,2,3,1,2,3,1],
              'diff_with_last_start': [0, 30, 24, 0, 23, 56, 0, 43, 54, 0]})
Out[68]: 
   category  date_start  order_start  diff_with_previous_start
0         1  2018-04-09            1                     0
1         1  2018-05-03            2                    25
2         1  2018-06-22            3                    49
3         2  2018-09-21            1                     0
4         2  2018-12-01            2                    70
5         2  2018-12-24            3                    56
6         3  2018-02-24            1                     0
7         3  2018-03-31            2                    43
8         3  2018-08-01            3                    54
9         4  2018-01-29            1                     0

注1:对于每个类别的第一个开始,差异总是为0。

注2:在我的示例中,我没有计算确切的天数差异

EN

Stack Overflow用户

回答已采纳

发布于 2019-06-27 21:40:03

使用groupbydiff

代码语言:javascript
复制
pd.to_datetime(df['date_start']).groupby(df['category']).diff().dt.days
# or, if `date_start` is already datetime,
df.groupby('category')['date_start'].diff().dt.days 

0      NaN
1     24.0
2     50.0
3      NaN
4     71.0
5     23.0
6      NaN
7     35.0
8    123.0
9      NaN
Name: date_start, dtype: float64
代码语言:javascript
复制
df['diff_with_previous_start'] = (
    pd.to_datetime(df['date_start'])
      .groupby(df['category'])
      .diff()
      .dt.days
      .fillna(0, downcast='infer')
)
df

   category  date_start  order_start  diff_with_previous_start
0         1  2018-04-09            1                         0
1         1  2018-05-03            2                        24
2         1  2018-06-22            3                        50
3         2  2018-09-21            1                         0
4         2  2018-12-01            2                        71
5         2  2018-12-24            3                        23
6         3  2018-02-24            1                         0
7         3  2018-03-31            2                        35
8         3  2018-08-01            3                       123
9         4  2018-01-29            1                         0
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56798745

复制
相关文章

相似问题

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