猿问

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

我有一个带有唯一 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


Cats萌萌
浏览 109回答 1
1回答

元芳怎么了

您可以使用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 difference0   0061R00000l43xP    1.0 2018-11-07        NaT1   0061R00000lUT5r    1.0 2019-05-02   -20 days2   0061R00000lUT5r    2.0 2019-05-22   -12 days3   0061R00000lUT5r    3.0 2019-06-03   -99 days5   0061R00000lUT5r    5.5 2019-09-10        NaT6   0061R00000lXwZL    1.0 2018-12-05  -125 days7   0061R00000lXwZL    4.0 2019-04-09   -10 days8   0061R00000lXwZL    5.0 2019-04-19     0 days9   0061R00000lXwZL    5.5 2019-04-19   -14 days10  0061R00000lXwZL    8.0 2019-05-03   -67 days11  0061R00000lXwZL    9.0 2019-07-09   -24 days12  0061R00000lXwZL   11.0 2019-08-02        NaT13  0061R00000lY4Vm    1.0 2018-12-06  -294 days14  0061R00000lY4Vm    2.0 2019-09-26        NaT15  0061R00000lrOGm    3.0 2019-02-15  -215 days16  0061R00000lrOGm    4.0 2019-09-18        NaT4   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 difference0   0061R00000l43xP    1.0 2018-11-07        NaT1   0061R00000lUT5r    1.0 2019-05-02   -20 days2   0061R00000lUT5r    2.0 2019-05-22   -12 days3   0061R00000lUT5r    3.0 2019-06-03   -99 days4   80061R0000lUT5r    5.0 2019-06-20        NaT5   0061R00000lUT5r    5.5 2019-09-10        NaT6   0061R00000lXwZL    1.0 2018-12-05  -125 days7   0061R00000lXwZL    4.0 2019-04-09   -10 days8   0061R00000lXwZL    5.0 2019-04-19     0 days9   0061R00000lXwZL    5.5 2019-04-19   -14 days10  0061R00000lXwZL    8.0 2019-05-03   -67 days11  0061R00000lXwZL    9.0 2019-07-09   -24 days12  0061R00000lXwZL   11.0 2019-08-02        NaT13  0061R00000lY4Vm    1.0 2018-12-06  -294 days14  0061R00000lY4Vm    2.0 2019-09-26        NaT15  0061R00000lrOGm    3.0 2019-02-15  -215 days16  0061R00000lrOGm    4.0 2019-09-18        NaT
随时随地看视频慕课网APP

相关分类

Python
我要回答