我有这个dataframe
:
df = pd.DataFrame(
{'id': [10, 10, 10, 12, 12, 12, 12, 13, 13, 13],
'session_id': [1, 3, 9, 1, 3, 5, 7, 1, 3, 5],
'start_time': [5866, 6810, 8689, 8802, 8910, 9013, 9055, 9157, 9654, 9665],
'end_time': [6808, 8653, 8722, 8881, 9001, 9049, 9062, 9651, 9659, 9725]
})
df.head()
id session_id start_time end_time
0 10 1 5866 6808
1 10 3 6810 8653
2 10 9 8689 8722
3 12 1 8802 8881
4 12 3 8910 9001
我需要一个新的stay_time列,用来存储用户在当前会话之后、新会话开始之前的停留时间。
要求:
id session_id start_time end_time stay_time
0 10 1 5866 6808 0
1 10 3 6810 8653 2
2 10 9 8689 8722 36
3 12 1 8802 8881 0
4 12 3 8910 9001 29
5 12 5 9013 9049 12
6 12 7 9055 9062 6
7 13 1 9157 9651 0
8 13 3 9654 9659 3
9 13 5 9665 9725 6
在SQL
中,这相当于:
# assuming participants is the table
select p.*,
start_time - lag(end_time, 1, start_time) over(partition by id order by session_id) stay_time
from participants p
2条答案
按热度按时间xe55xuns1#
可以按以下方式使用
groupby
和shift
:它给出了
4xrmg8kj2#
将
Series.sub
与DataFrameGroupBy.shift
和Series.fillna
一起使用: