计算给定特定值的两个日期之间的天数

Mataunited18

我有一个数据框df1,我想在给定三个条件的情况下计算两个日期之间的天数,并创建一个DiffDays具有天数差异的新列

1)当Yes1

2) 当值Value不为零时

3) 必须是UserId具体的(也许有groupby()

df1 = pd.DataFrame({'Date':['02.01.2017', '03.01.2017', '04.01.2017', '05.01.2017', '01.01.2017', '02.01.2017', '03.01.2017'],
                   'UserId':[1,1,1,1,2,2,2],
                   'Value':[0,0,0,100,0,1000,0],
                   'Yes':[1,0,0,0,1,0,0]})

例如,whenYes为 1,计算 whenValue为非零(即 05.01.2017)和 whenYes为 1(即 02.01.2017)之间的日期。结果是第 3 行中 UserId 的三天。

预期结果:

        Date    UserId  Value   Yes  DiffDays
0   02.01.2017  1        0.0    1    0
1   03.01.2017  1        0.0    0.0  0
2   04.01.2017  1        0.0    0.0  0
3   05.01.2017  1        100    0.0  3
4   01.01.2017  2        0.0    1    0
5   02.01.2017  2        1000   0.0  1
6   03.01.2017  2        0.0    0.0  0

我在 Stackoverflow 上找不到任何关于此的信息,也不知道如何开始。

心愿
def dayDiff(groupby):
    if (not (groupby.Yes == 1).any()) or (not (groupby.Value > 0).any()):
        return np.zeros(groupby.Date.count())

    min_date = groupby[groupby.Yes == 1].Date.iloc[0]    
    max_date = groupby[groupby.Value > 0].Date.iloc[0]
    delta = max_date - min_date
    return np.where(groupby.Value > 0 , delta.days, 0)


df1.Date = pd.to_datetime(df1.Date, dayfirst=True)
DateDiff = df1.groupby('UserId').apply(dayDiff).explode().rename('DateDiff').reset_index(drop=True)
pd.concat([df1, DateDiff], axis=1)

返回:


Date    UserId  Value     Yes       DateDiff
0   2017-01-02  1   0      1          0
1   2017-01-03  1   0      0          0
2   2017-01-04  1   0      0          0
3   2017-01-05  1   100    0          3
4   2017-01-01  2   0      1          0
5   2017-01-02  2   1000   0          1
6   2017-01-03  2   0      0          0

尽管这回答了您的问题,但diff很难遵循日期逻辑,尤其是在DateDiff的放置方面

更新

pd.Series.explode()仅在pandasversion 中引入0.25,对于使用以前版本的人:

df1.Date = pd.to_datetime(df1.Date, dayfirst=True)
DateDiff = (df1
            .groupby('UserId')
            .apply(dayDiff)
            .to_frame()
            .explode(0)
            .reset_index(drop=True)
            .rename(columns={0: 'DateDiff'}))
pd.concat([df1, DateDiff], axis=1)

这将产生相同的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算两个给定日期之间的天数

来自分类Dev

计算两个日期之间的天数?

来自分类Dev

计算两个日期之间的天数

来自分类Dev

如何计算两个给定日期之间的天数

来自分类Dev

如何计算在处理3两个给定日期之间的天数?

来自分类Dev

给定多个工作日作为输入,计算两个日期之间的“实际”天数

来自分类Dev

Python,在一种特定情况下,计算两个日期之间的天数会返回错误的值

来自分类Dev

计算JPA中两个日期之间的天数

来自分类Dev

如何计算两个日期之间的天数

来自分类Dev

计算java中两个日期之间的天数

来自分类Dev

Python如何计算两个日期之间的天数?

来自分类Dev

如何计算两个日期之间的天数

来自分类Dev

计算R中两个日期之间的天数

来自分类Dev

如何计算两个日期之间的星期天数

来自分类Dev

如何计算oracle中两个日期之间的天数?

来自分类Dev

计算两个日期之间的天数(不使用模块)

来自分类Dev

如何计算两个日期之间的星期数,天数

来自分类Dev

如何用条件在两个日期之间计算天数

来自分类Dev

计算PHP中两个日期之间的天数

来自分类Dev

如何计算两个日期之间的星期天数

来自分类Dev

获取两个日期之间的天数

来自分类Dev

列出两个日期之间的天数

来自分类Dev

计算两个日期之间的天数(一个日期可能为空)Google Spreadsheets

来自分类Dev

如何获取Scala中两个给定日期之间的天数

来自分类Dev

计算两个日期之间的特定工作日

来自分类Dev

如何计算不。日历中两个日期之间的天数,以字符串格式vb

来自分类Dev

再次关于使用JavaScript计算两个日期之间的天数

来自分类Dev

计算HTML中两个输入类型=“日期”之间的天数

来自分类Dev

使用moments.js计算两个日期之间的天数

Related 相关文章

  1. 1

    计算两个给定日期之间的天数

  2. 2

    计算两个日期之间的天数?

  3. 3

    计算两个日期之间的天数

  4. 4

    如何计算两个给定日期之间的天数

  5. 5

    如何计算在处理3两个给定日期之间的天数?

  6. 6

    给定多个工作日作为输入,计算两个日期之间的“实际”天数

  7. 7

    Python,在一种特定情况下,计算两个日期之间的天数会返回错误的值

  8. 8

    计算JPA中两个日期之间的天数

  9. 9

    如何计算两个日期之间的天数

  10. 10

    计算java中两个日期之间的天数

  11. 11

    Python如何计算两个日期之间的天数?

  12. 12

    如何计算两个日期之间的天数

  13. 13

    计算R中两个日期之间的天数

  14. 14

    如何计算两个日期之间的星期天数

  15. 15

    如何计算oracle中两个日期之间的天数?

  16. 16

    计算两个日期之间的天数(不使用模块)

  17. 17

    如何计算两个日期之间的星期数,天数

  18. 18

    如何用条件在两个日期之间计算天数

  19. 19

    计算PHP中两个日期之间的天数

  20. 20

    如何计算两个日期之间的星期天数

  21. 21

    获取两个日期之间的天数

  22. 22

    列出两个日期之间的天数

  23. 23

    计算两个日期之间的天数(一个日期可能为空)Google Spreadsheets

  24. 24

    如何获取Scala中两个给定日期之间的天数

  25. 25

    计算两个日期之间的特定工作日

  26. 26

    如何计算不。日历中两个日期之间的天数,以字符串格式vb

  27. 27

    再次关于使用JavaScript计算两个日期之间的天数

  28. 28

    计算HTML中两个输入类型=“日期”之间的天数

  29. 29

    使用moments.js计算两个日期之间的天数

热门标签

归档