在此数据帧上正确应用cumcount

2024-04-20 05:54:24 发布

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

我有一个像这样的日期框

   ProductNumber   ProductVersion    DateStarted   
        AX1              R1          2018-01-01    
        AX1              R1          2018-01-02    
        AX1              R2          2018-01-03    
        AX1              R3          2018-01-04    
        AX1              R3          2018-01-05    
        BX1              R1          2018-01-01    
        BX1              R1          2018-01-02    
        AX1              R5          2018-01-03    
        AX1              R5          2018-01-04    
        AX1              R5          2018-01-05    

我想对DateStarted列中的ProductNumber应用cumcount,这样就可以得到下面的dataframe。你知道吗

   ProductNumber   ProductVersion    DateStarted   Count
        AX1              R1          2018-01-01    0
        AX1              R1          2018-01-02    1
        AX1              R2          2018-01-03    0 
        AX1              R3          2018-01-04    0
        AX1              R3          2018-01-05    1
        BX1              R1          2018-01-01    0
        BX1              R1          2018-01-02    1
        AX1              R5          2018-01-03    0
        AX1              R5          2018-01-04    1
        AX1              R5          2018-01-05    2

首先,我使用

  df = d.sort_values(['ProductNumber','ProductVersion', 'DateStarted'], ascending = [True,True,True]).reset_index(drop=True)

然后我想以某种方式应用cumcount,我试着这样做。你知道吗

 df['count'] =(df.drop_duplicates(['ProductNumber','ProductVersion', 'DateStarted'])
  .groupby(['ProductNumber', 'ProductVersion'])['DateStarted']
  .cumcount())

 df['count'] = df['count'].ffill().astype(int)

但它不起作用。如何正确地执行此操作?你知道吗

编辑:这是我的输出

   ProductNumber   ProductVersion    DateStarted   Count
        AX1              R1          2018-01-01    0
        AX1              R1          2018-01-02    0
        AX1              R2          2018-01-03    1 
        AX1              R3          2018-01-04    0
        AX1              R3          2018-01-05    1
        BX1              R1          2018-01-01    0
        BX1              R1          2018-01-02    0
        AX1              R5          2018-01-03    0
        AX1              R5          2018-01-04    1
        AX1              R5          2018-01-05    1

Tags: truedfcountdropr2r3r5r1
1条回答
网友
1楼 · 发布于 2024-04-20 05:54:24

你的方法是正确的,如果你只是剃掉一些东西:

df['Count'] = df.groupby(['ProductNumber', 'ProductVersion']).cumcount()
df

输出:

  ProductNumber ProductVersion DateStarted  Count
0           AX1             R1  2018-01-01      0
1           AX1             R1  2018-01-02      1
2           AX1             R2  2018-01-03      0
3           AX1             R3  2018-01-04      0
4           AX1             R3  2018-01-05      1
5           BX1             R1  2018-01-01      0
6           BX1             R1  2018-01-02      1
7           AX1             R5  2018-01-03      0
8           AX1             R5  2018-01-04      1
9           AX1             R5  2018-01-05      2

相关问题 更多 >