首页 > 解决方案 > 如果发现重复条目​​,则在先前特定列值的计数中加 1

问题描述

i have a dataframe like this in pandas 

              StartTime     EndTime             RuleCount   duser    pastcount   pastfire

 1       2020-09-04 17:19:30 2020-09-04 17:20:00      9         test        1          10
 2       2020-09-04 17:21:30 2020-09-04 17:22:00      9         test1       2          20
 3       2020-09-04 17:22:30 2020-09-04 17:23:00      9         test        1           5
 4       2020-09-04 17:15:30 2020-09-04 17:16:00      9         test        1           5
 5       2020-09-04 17:17:30 2020-09-04 17:18:00      9         test1       1           5
 6       2020-09-04 17:19:30 2020-09-04 17:20:00      9         test3       0           5

我想要如下所示的输出。如果第一次找到 duser,则只需将重复列中的过去计数复制一次,如果它再存在一次,然后将重复列的前一个值加 1,依此类推。

              StartTime     EndTime       RuleCount     duser    pastcount   pastfire   repeat

 1       2020-09-04 17:19:30 2020-09-04 17:20:00      9         test        1          10  1
 2       2020-09-04 17:21:30 2020-09-04 17:22:00      9         test1       2          20  2
 3       2020-09-04 17:22:30 2020-09-04 17:23:00      9         test        1           5  2
 4       2020-09-04 17:15:30 2020-09-04 17:16:00      9         test        1           5  3
 5       2020-09-04 17:17:30 2020-09-04 17:18:00      9         test1       1           5  3
 6       2020-09-04 17:19:30 2020-09-04 17:20:00      9         test3       0           5  0

标签: pythonpandasdataframe

解决方案


pandas.DataFrame.transform与 一起使用cumcount

g = df.groupby("duser")
df["repeat"] = g["pastcount"].transform("first") + g["duser"].cumcount()
print(df)

输出:

             StartTime              EndTime  RuleCount  duser  pastcount  \
1  2020-09-04 17:19:30  2020-09-04 17:20:00          9   test          1   
2  2020-09-04 17:21:30  2020-09-04 17:22:00          9  test1          2   
3  2020-09-04 17:22:30  2020-09-04 17:23:00          9   test          1   
4  2020-09-04 17:15:30  2020-09-04 17:16:00          9   test          1   
5  2020-09-04 17:17:30  2020-09-04 17:18:00          9  test1          1   
6  2020-09-04 17:19:30  2020-09-04 17:20:00          9  test3          0   

   pastfire  repeat  
1        10       1  
2        20       2  
3         5       2  
4         5       3  
5         5       3  
6         5       0  

推荐阅读