Datetime和基于ID的Cumcount

2024-09-30 05:18:00 发布

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

我正在尝试实现一个有点棘手的Pandas列中的累积计数,其中每个日期和ID号只添加一次计数

下面的视觉效果将有助于解释,我当前的数据集如下所示:

ID     Date     Mention_of_Yes
XDA  11/19/2019     0
XDA  12/19/2019     1
XDA  12/19/2019     1
XDA  1/19/2020      1
XDA  2/19/2020      0
XDA  3/19/2020      1
JJL  11/2/2019      1
JJL  11/2/2019      1
JJL  12/2/20019     0
JJL  1/20/2020      1

我正试图添加一个列,以这种特定的方式计算,在特定的日期,每次“提及是”仅一次:

ID    Date      Mention_of_Yes    *Correct CumCount 
XDA  11/19/2019      0                     0    
XDA  12/19/2019      1                     1    
XDA  12/19/2019      1                     1** Only Counts Once Per Date (12/19/2019 in this case)
XDA  1/19/2020       1                     2    
XDA  2/19/2020       0                     2    
XDA  3/19/2020       1                     3
JJL  19/2/2019       0                     0
JJL  10/2/2019       0                     0    
JJL  11/2/2019       1                     1    
JJL  11/2/2019       1                     1** Only Counts Once Per Date (11/2/2019 in this case)
JJL  12/2/20019      0                     1    
JJL  1/20/2020       1                     2    

我尝试了groupby和cumcount的不同迭代,但似乎无法正确配置,就像我在下面使用的代码一样:

df['Correct_CumCount'] = df.groupby[('ID','Mention_of_Yes')].cumcount()+1

任何帮助都将不胜感激


Tags: ofinidonlydateyes计数per
1条回答
网友
1楼 · 发布于 2024-09-30 05:18:00

您可以在drop_duplicates之后使用groupbycumsum(而不是cumcount),然后使用ffill来执行此操作,如:

df['Correct_CumCount'] = df.drop_duplicates(subset=['ID', 'Date', 'Mention_of_Yes'], 
                                            keep='first')\
                           .groupby('ID')['Mention_of_Yes'].cumsum()
df['Correct_CumCount'] = df['Correct_CumCount'].ffill().astype(int)

print (df)
    ID        Date  Mention_of_Yes  Correct_CumCount
0  XDA  11/19/2019               0                 0
1  XDA  12/19/2019               1                 1
2  XDA  12/19/2019               1                 1
3  XDA   1/19/2020               1                 2
4  XDA   2/19/2020               0                 2
5  XDA   3/19/2020               1                 3
6  JJL   11/2/2019               1                 1
7  JJL   11/2/2019               1                 1
8  JJL  12/2/20019               0                 1
9  JJL   1/20/2020               1                 2

相关问题 更多 >

    热门问题