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

2024-04-23 02:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据框,它有一个惟一的ID、一个stage和一个与该stage相关联的日期。我想创建一个新的专栏,展示在那个特定阶段所花的时间。这意味着减去该唯一ID的日期减去与该相同ID关联的下一阶段的日期。由于数据按ID和阶段排序,该ID记录的最后阶段应出错并读取“当前”或n/a。下面的数据很有帮助。我在想有一种方法可以实现多个for循环,但我不确定如何做到这一点

我曾尝试在熔化数据帧之前创建新列,但在许多情况下,下一阶段是不适用的。并非总是第一阶段=>;2=大于;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

Tags: 数据方法idpandasforobject排序value
1条回答
网友
1楼 · 发布于 2024-04-23 02:24:31

您可以使用^{}+^{} 根据ID按组计算差异。 为了计算差异,使用^{}将日期转换为日期时间:

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

相关问题 更多 >