我有一个类似这样的日期框架
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
答案 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