pandas 基于条件的聚合计数器

i2byvkas  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(173)

现有数据框架:

Id      action_date         diff_of_time_in_sec          
A        2021-06-09                 10                          
A        2021-06-09                 200                         
A        2021-06-09                 1300                        
A        2021-06-09                 1500                        
B        2021-06-10                  2                          
B        2021-06-10                  15                         
B        2021-06-10                  100                        
B        2021-06-10                  2000

预期的 Dataframe :

Id      action_date         diff_of_time_in_sec          session_counter
A        2021-06-09                 10                          1
A        2021-06-09                 200                         1
A        2021-06-09                 1300                        2
A        2021-06-09                 1500                        3
B        2021-06-10                  2                          1
B        2021-06-10                  15                         1
B        2021-06-10                  100                        1
B        2021-06-10                  2000                       2

我正在尝试基于diff_of_time_in_sec列创建会话计数器。只要diff_of_time_in_sec大于1200,就必须启动新会话
这就是我所尝试的:

df['Session_Conter'] = ((df['diff_of_time_in_sec'] > 1200)
                                 .groupby(df['Id']).cumsum())
sqxo8psd

sqxo8psd1#

这其中的逻辑并不清楚。
如果您希望每1200秒有一个计数器,则不需要groupby:

df['session_counter'] = df['diff_of_time_in_sec'].floordiv(1200).add(1)

输出:

Id action_date  diff_of_time_in_sec  session_counter
0  A  2021-06-09                   10                1
1  A  2021-06-09                  200                1
2  A  2021-06-09                 1300                2
3  A  2021-06-09                 1500                2
4  B  2021-06-10                    2                1
5  B  2021-06-10                   15                1
6  B  2021-06-10                  100                1
7  B  2021-06-10                 2000                2
okxuctiv

okxuctiv2#

def function1(dd:pd.DataFrame):
    dd['col1']=(dd.diff_of_time_in_sec>1200).cumsum()+1
    return dd

df1.groupby('Id').apply(function1)

  Id action_date  diff_of_time_in_sec  col1
0  A  2021-06-09                   10     1
1  A  2021-06-09                  200     1
2  A  2021-06-09                 1300     2
3  A  2021-06-09                 1500     3
4  B  2021-06-10                    2     1
5  B  2021-06-10                   15     1
6  B  2021-06-10                  100     1
7  B  2021-06-10                 2000     2

相关问题