根据时间间隔对数据进行分组

时间:2020-05-22 12:29:31

标签: python pandas dataframe grouping

我必须将具有多个参与者的数据集分组。参与者在特定的平板电脑上工作特定的时间。如果行是同一平板电脑,并且连续行之间的时间差不超过10分钟,则这些行属于一个参与者。我想创建一个新列(“参与者”),为参与者编号。我知道一些python,但这让我感到头疼。非常感谢!

数据框:

ID, Time, Tablet
1, 9:12, a
2, 9:14, a
3, 9:17, a
4, 9:45, a
5, 9:49, a
6, 9:51, a
7, 9:13, b 
8, 9:15, b
...

目标:

ID, Time, Tablet, Participant
1, 9:12, a, 1
2, 9:14, a, 1
3, 9:17, a, 1
4, 9:45, a, 2
5, 9:49, a, 2
6, 9:51, a, 2
7, 9:13, b, 3
8, 9:15, b, 3
...

2 个答案:

答案 0 :(得分:0)

我之前做过类似的事情,我使用了group_by语句和Pandas shift函数的组合。

df = df.sort_values(["Tablet", "Time"])
df["Time_Period"] = df.groupby("Tablet")["Time"].shift(-1)-df["Time"]
df["Time_Period"] = df["Time_Period"].dt.total_seconds()
df["New_Participant"] = df["Time_Period"] > 10*60 #10 Minutes
df["Participant_ID"] = df["New_Participant"].cumsum()

基本上,我会在每次会话之间的间隔超过10分钟时进行标记,然后进行滚动汇总以为每个参与者提供唯一的ID

答案 1 :(得分:0)

您可以先进行groupby,然后进行总计以所需的方式获取参与者列。请确保时间列为日期时间格式,并对其进行排序。

df['time'] = pd.to_datetime(df['time']) 
df['time_diff']=df.groupby(['tablet'])['time'].diff().dt.seconds/60 
df['participant'] = np.where((df['time_diff'].isnull()) | (df['time_diff']>10), 1,0).cumsum()