在此熊猫数据框上正确应用cumcount

时间:2019-03-21 22:58:59

标签: python pandas

我有一个类似这样的日期框架

   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    

我想对ProductNumber应用于DateStarted列上的累加数,以便获得以下数据框。

   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)

然后我想以某种方式申请累加计,我尝试这样做。

 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

1 个答案:

答案 0 :(得分:1)

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

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