如何计算数据帧中一组分组行中的前一个差异

哈里·帕尔默

我正在寻求有关Pandas中同时出现的按组/按行差异问题的帮助。问题恰如此处R中所述:对于每个组(学生合同),如何计算日期时间之间的时间差?

我有这样的数据:

#   USER_ID CONTRACT_REF SUBMISSION_DATE  
1        1        A        20/6 01:00   
2        1        A        20/6 02:00   
3        1        B        20/6 03:00   
4        4        A        20/6 04:00   
5        5        A        20/6 05:00   
6        5        B        20/6 06:00   
7        7        A        20/6 07:00   
8        7        B        20/6 08:00   
9        7        B        20/6 09:30   
10       7        B        20/6 10:00   

我想为每个唯一的USER_ID-CONTRACT_REF对计算与上次提交的时间差

注意:每对USER_ID-CONTRACT_REF对首次出现时都必须具有零(或null)。

因此,输出应如下所示:

#   USER_ID CONTRACT_REF SUBMISSION_DATE   TIME_DIFFERENCE
1        1        A        20/6 01:00             0
2        1        A        20/6 02:00             1
3        1        B        20/6 03:00             0
4        4        A        20/6 04:00             0
5        5        A        20/6 05:00             0          
6        5        B        20/6 06:00             0
7        7        A        20/6 07:00             0
8        7        A        20/6 08:00             1
9        7        A        20/6 09:30             1.5
10       7        B        20/6 10:00             0

我目前正在从R迁移到Pandas,虽然我发现语法令人耳目一新,但是当涉及到数据帧上的复杂函数时,我有些困惑。

在此先感谢您提供任何提示!

帝斯曼

[注意:您的数据似乎与所需的输出不匹配;C第二秒没有CONTRACT_REF ,即使在您的输出中,我也看不到为什么5, B行是1而不是0。我假设这是您的错误。由于您没有评论,因此我将使用输出中的数据,因为它会导致出现一个更有趣的列。]

我可能会做类似的事情

df["SUBMISSION_DATE"] = pd.to_datetime(df["SUBMISSION_DATE"],dayfirst=True)

gs = df.groupby(["USER_ID", "CONTRACT_REF"])["SUBMISSION_DATE"]
df["TIME_DIFF"] = gs.diff().fillna(0) / pd.datetools.timedelta(hours=1)

产生

>>> df
    #  USER_ID CONTRACT_REF     SUBMISSION_DATE  TIME_DIFF
0   1        1            A 2014-06-20 01:00:00        0.0
1   2        1            A 2014-06-20 02:00:00        1.0
2   3        1            B 2014-06-20 03:00:00        0.0
3   4        4            A 2014-06-20 04:00:00        0.0
4   5        5            A 2014-06-20 05:00:00        0.0
5   6        5            B 2014-06-20 06:00:00        0.0
6   7        7            A 2014-06-20 07:00:00        0.0
7   8        7            A 2014-06-20 08:00:00        1.0
8   9        7            A 2014-06-20 09:30:00        1.5
9  10        7            B 2014-06-20 10:00:00        0.0

[10 rows x 5 columns]

一些解释:从像这样的数据帧开始

>>> df
    #  USER_ID CONTRACT_REF SUBMISSION_DATE
0   1        1            A      20/6 01:00
1   2        1            A      20/6 02:00
2   3        1            B      20/6 03:00
3   4        4            A      20/6 04:00
4   5        5            A      20/6 05:00
5   6        5            B      20/6 06:00
6   7        7            A      20/6 07:00
7   8        7            A      20/6 08:00
8   9        7            A      20/6 09:30
9  10        7            B      20/6 10:00

[10 rows x 4 columns]

我们要将SUBMISSION_DATE列从字符串转换为实际日期对象:

>>> df["SUBMISSION_DATE"] = pd.to_datetime(df["SUBMISSION_DATE"],dayfirst=True)
>>> df
    #  USER_ID CONTRACT_REF     SUBMISSION_DATE
0   1        1            A 2014-06-20 01:00:00
1   2        1            A 2014-06-20 02:00:00
2   3        1            B 2014-06-20 03:00:00
3   4        4            A 2014-06-20 04:00:00
4   5        5            A 2014-06-20 05:00:00
5   6        5            B 2014-06-20 06:00:00
6   7        7            A 2014-06-20 07:00:00
7   8        7            A 2014-06-20 08:00:00
8   9        7            A 2014-06-20 09:30:00
9  10        7            B 2014-06-20 10:00:00

[10 rows x 4 columns]

然后,我们可以按USER_ID分组CONTRACT_REF,然后选择SUBMISSION_DATE列:

>>> gs = df.groupby(["USER_ID", "CONTRACT_REF"])["SUBMISSION_DATE"]
>>> gs
<pandas.core.groupby.SeriesGroupBy object at 0xa7af08c>

然后我们可以得出每个组的差异:

>>> gs.diff()
0        NaT
1   01:00:00
2        NaT
3        NaT
4        NaT
5        NaT
6        NaT
7   01:00:00
8   01:30:00
9        NaT
dtype: timedelta64[ns]

NaT,不是时间,是的时间等效项NaN我们可以用0填充它们:

>>> gs.diff().fillna(0)
0   00:00:00
1   01:00:00
2   00:00:00
3   00:00:00
4   00:00:00
5   00:00:00
6   00:00:00
7   01:00:00
8   01:30:00
9   00:00:00
dtype: timedelta64[ns]

而且由于您希望以小时为单位进行度量,因此我们可以除以1小时的时间增量:

>>> gs.diff().fillna(0) / pd.datetools.timedelta(hours=1)
0    0.0
1    1.0
2    0.0
3    0.0
4    0.0
5    0.0
6    0.0
7    1.0
8    1.5
9    0.0
dtype: float64

将此分配给框架:

>>> df["TIME_DIFF"] = gs.diff().fillna(0) / pd.datetools.timedelta(hours=1)

至此,我们完成了:

>>> df
    #  USER_ID CONTRACT_REF     SUBMISSION_DATE  TIME_DIFF
0   1        1            A 2014-06-20 01:00:00        0.0
1   2        1            A 2014-06-20 02:00:00        1.0
2   3        1            B 2014-06-20 03:00:00        0.0
3   4        4            A 2014-06-20 04:00:00        0.0
4   5        5            A 2014-06-20 05:00:00        0.0
5   6        5            B 2014-06-20 06:00:00        0.0
6   7        7            A 2014-06-20 07:00:00        0.0
7   8        7            A 2014-06-20 08:00:00        1.0
8   9        7            A 2014-06-20 09:30:00        1.5
9  10        7            B 2014-06-20 10:00:00        0.0

[10 rows x 5 columns]

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用R计算数据框中一组行的相似度

来自分类Dev

如何使用R计算数据框中一组行的相似度

来自分类Dev

如何计算火花数据帧中一个col的差异?

来自分类Dev

如何计算数据框分组依据中行的唯一组合?

来自分类Dev

汇总熊猫中的一组分组数据

来自分类Dev

返回一组分组中的前x个项目

来自分类Dev

如何在R中的一个列表中管理一组数据帧

来自分类Dev

如何在R中的一个列表中管理一组数据帧

来自分类Dev

计算数据帧组内的差异

来自分类Dev

计算数据帧中另一个变量级别内的级别数

来自分类Dev

写一个 R 脚本来计算数据帧中的平均值

来自分类Dev

如何计算一个数据帧中一列的连续字符串值与另一列的列值分组?

来自分类Dev

如何返回一组分组项?

来自分类Dev

如何用列计算在R中创建一个数据帧,该计算引用前一行中的自身值?

来自分类Dev

Xquery:计算一组记录中每个记录中一个术语出现的次数

来自分类Dev

计算数据帧中条件变化时的行差异

来自分类Dev

编写一个对熊猫数据帧中一行中的某些值求和的函数

来自分类Dev

在另一个数据帧中插入数据帧到行的每个组

来自分类Dev

如何查找合并中未找到的行 - 仅相对于其中一个数据帧?

来自分类Dev

在R中,如何合并两个数据帧,其中一个中的列名等于另一个中的行值?

来自分类Dev

如何取消选中一组单选按钮时一个在另一个组中检查

来自分类Dev

我如何计算数组中是否存在一组特定的数字

来自分类Dev

计算数据库中每两行之间的字段 - 按实体分组 - 同一个表 - postgresql

来自分类Dev

如何选择一组记录,其中一个包含ID

来自分类Dev

当其中一个失败时如何处理一组延迟的

来自分类Dev

如何计算python中一组值的模量值?

来自分类Dev

如何在一个SQL中以每周和每月的粒度计算数据

来自分类Dev

R:循环遍历一个数据帧中的一组值更新第二个数据帧

来自分类Dev

如何计算数据帧的所有行与 r 中的最后一行之间的欧几里德距离

Related 相关文章

  1. 1

    如何使用R计算数据框中一组行的相似度

  2. 2

    如何使用R计算数据框中一组行的相似度

  3. 3

    如何计算火花数据帧中一个col的差异?

  4. 4

    如何计算数据框分组依据中行的唯一组合?

  5. 5

    汇总熊猫中的一组分组数据

  6. 6

    返回一组分组中的前x个项目

  7. 7

    如何在R中的一个列表中管理一组数据帧

  8. 8

    如何在R中的一个列表中管理一组数据帧

  9. 9

    计算数据帧组内的差异

  10. 10

    计算数据帧中另一个变量级别内的级别数

  11. 11

    写一个 R 脚本来计算数据帧中的平均值

  12. 12

    如何计算一个数据帧中一列的连续字符串值与另一列的列值分组?

  13. 13

    如何返回一组分组项?

  14. 14

    如何用列计算在R中创建一个数据帧,该计算引用前一行中的自身值?

  15. 15

    Xquery:计算一组记录中每个记录中一个术语出现的次数

  16. 16

    计算数据帧中条件变化时的行差异

  17. 17

    编写一个对熊猫数据帧中一行中的某些值求和的函数

  18. 18

    在另一个数据帧中插入数据帧到行的每个组

  19. 19

    如何查找合并中未找到的行 - 仅相对于其中一个数据帧?

  20. 20

    在R中,如何合并两个数据帧,其中一个中的列名等于另一个中的行值?

  21. 21

    如何取消选中一组单选按钮时一个在另一个组中检查

  22. 22

    我如何计算数组中是否存在一组特定的数字

  23. 23

    计算数据库中每两行之间的字段 - 按实体分组 - 同一个表 - postgresql

  24. 24

    如何选择一组记录,其中一个包含ID

  25. 25

    当其中一个失败时如何处理一组延迟的

  26. 26

    如何计算python中一组值的模量值?

  27. 27

    如何在一个SQL中以每周和每月的粒度计算数据

  28. 28

    R:循环遍历一个数据帧中的一组值更新第二个数据帧

  29. 29

    如何计算数据帧的所有行与 r 中的最后一行之间的欧几里德距离

热门标签

归档