为了账号安全,请及时绑定邮箱和手机立即绑定

如何遍历唯一 ID 并计算日期值之间的差异并将值写入新列

如何遍历唯一 ID 并计算日期值之间的差异并将值写入新列

Cats萌萌 2022-06-22 18:14:16
我有一个带有唯一 ID、阶段和与该阶段关联的日期的 pandas 数据框。我想创建一个新列,显示在该特定阶段花费的时间。这意味着减去该唯一 ID 的日期减去与该相同 ID 关联的下一阶段的日期。由于数据是按 ID 和阶段排序的,该 ID 记录的最后阶段应该出错并读取“当前”或 n/a。它有助于查看下面的数据。我在想有一种方法可以执行多个 for 循环,但我不确定如何执行此操作。我曾尝试在融合数据框之前创建新列,但在很多情况下下一阶段是 n/a。它并不总是第 1 阶段=>2=>3 等,它可以直接从第 1 阶段跳到第 3 阶段。   example.describe   Opportunity_ID  stage      value   0061R00000l43xP    1.0 2018-11-07   0061R00000lUT5r    1.0 2019-05-02   0061R00000lUT5r    2.0 2019-05-22   0061R00000lUT5r    3.0 2019-06-03   80061R0000lUT5r    5.0 2019-06-20   0061R00000lUT5r    5.5 2019-09-10   0061R00000lXwZL    1.0 2018-12-05   0061R00000lXwZL    4.0 2019-04-09   0061R00000lXwZL    5.0 2019-04-19   0061R00000lXwZL    5.5 2019-04-19   0061R00000lXwZL    8.0 2019-05-03   0061R00000lXwZL    9.0 2019-07-09   0061R00000lXwZL   11.0 2019-08-02   0061R00000lY4Vm    1.0 2018-12-06   0061R00000lY4Vm    2.0 2019-09-26   0061R00000lrOGm    3.0 2019-02-15   0061R00000lrOGm    4.0 2019-09-18  [793 rows x 3 columns]>  example.dtypes  Opportunity_ID            object  stage                    float64  value             datetime64[ns]  dtype: object
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您可以使用sort_values+ groupby 根据 ID 按组计算差异。为了计算差值,使用 . 将日期转换为日期时间pd.to_datetime:


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

df=df.sort_values(['Opportunity_ID','stage'])

df['difference']=df.groupby('Opportunity_ID')['value'].diff(-1)

print(df)

     Opportunity_ID  stage      value difference

0   0061R00000l43xP    1.0 2018-11-07        NaT

1   0061R00000lUT5r    1.0 2019-05-02   -20 days

2   0061R00000lUT5r    2.0 2019-05-22   -12 days

3   0061R00000lUT5r    3.0 2019-06-03   -99 days

5   0061R00000lUT5r    5.5 2019-09-10        NaT

6   0061R00000lXwZL    1.0 2018-12-05  -125 days

7   0061R00000lXwZL    4.0 2019-04-09   -10 days

8   0061R00000lXwZL    5.0 2019-04-19     0 days

9   0061R00000lXwZL    5.5 2019-04-19   -14 days

10  0061R00000lXwZL    8.0 2019-05-03   -67 days

11  0061R00000lXwZL    9.0 2019-07-09   -24 days

12  0061R00000lXwZL   11.0 2019-08-02        NaT

13  0061R00000lY4Vm    1.0 2018-12-06  -294 days

14  0061R00000lY4Vm    2.0 2019-09-26        NaT

15  0061R00000lrOGm    3.0 2019-02-15  -215 days

16  0061R00000lrOGm    4.0 2019-09-18        NaT

4   80061R0000lUT5r    5.0 2019-06-20        NaT

订购可能对您不方便。您可以在不预先排序值的情况下计算它。这将是您示例的结果:


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

df['difference']=df.groupby('Opportunity_ID')['value'].diff(-1)

print(df)


    Opportunity_ID  stage      value difference

0   0061R00000l43xP    1.0 2018-11-07        NaT

1   0061R00000lUT5r    1.0 2019-05-02   -20 days

2   0061R00000lUT5r    2.0 2019-05-22   -12 days

3   0061R00000lUT5r    3.0 2019-06-03   -99 days

4   80061R0000lUT5r    5.0 2019-06-20        NaT

5   0061R00000lUT5r    5.5 2019-09-10        NaT

6   0061R00000lXwZL    1.0 2018-12-05  -125 days

7   0061R00000lXwZL    4.0 2019-04-09   -10 days

8   0061R00000lXwZL    5.0 2019-04-19     0 days

9   0061R00000lXwZL    5.5 2019-04-19   -14 days

10  0061R00000lXwZL    8.0 2019-05-03   -67 days

11  0061R00000lXwZL    9.0 2019-07-09   -24 days

12  0061R00000lXwZL   11.0 2019-08-02        NaT

13  0061R00000lY4Vm    1.0 2018-12-06  -294 days

14  0061R00000lY4Vm    2.0 2019-09-26        NaT

15  0061R00000lrOGm    3.0 2019-02-15  -215 days

16  0061R00000lrOGm    4.0 2019-09-18        NaT



查看完整回答
反对 回复 2022-06-22
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号