这给了我 df 中 ID 的进入和退出时间:
minmax = merged_df.groupby(['id'])['date'].agg([min, max])
result
id min max
4900 2019-09-17 08:43:06 2019-09-17 09:38:20
4909 2019-09-17 08:43:06 2019-09-17 09:16:00
4911 2019-09-17 08:43:06 2019-09-17 09:43:58
4965 2019-09-17 09:27:14 2019-09-17 09:38:28
5134 2019-09-17 09:34:26 2019-09-17 09:38:27
5139 2019-09-17 09:37:03 2019-09-17 09:46:19
5141 2019-09-17 09:37:22 2019-09-17 12:06:30
5163 2019-09-17 09:38:03 2019-09-17 10:18:29
5170 2019-09-17 09:38:19 2019-09-17 12:47:49
这就是我的 DF 结构的样子:
df
date x y id
2019-09-17 08:43:06 206 210 4900
2019-09-17 08:43:06 234 236 4909
2019-09-17 08:43:06 251 222 4911
2019-09-17 08:43:07 231 244 4909
2019-09-17 08:43:07 252 222 4911
2019-09-17 08:43:07 207 210 4965
2019-09-17 08:43:08 234 250 5163
2019-09-17 08:43:08 252 222 4911
2019-09-17 08:43:08 206 210 4900
2019-09-17 08:43:09 252 222 4911
2019-09-17 08:43:09 206 210 4900
2019-09-17 08:43:09 223 247 4909
2019-09-17 08:43:10 206 210 4900
2019-09-17 08:43:10 229 237 4909
2019-09-17 08:43:10 252 222 4911
2019-09-17 08:43:12 226 241 4909
我如何在 DF 中创建一个新列来比较给定秒内 ID 的入口点,如果它们出现在同一时间范围内(例如同一分钟),那么我想得到类似的内容插入组大小,如下所示:
df
date x y id groupsize
2019-09-17 08:43:06 206 210 4900 3
2019-09-17 08:43:06 234 236 4909 3
2019-09-17 08:43:06 251 222 4911 3
2019-09-17 08:43:07 231 244 4909 3
2019-09-17 08:43:07 252 222 4911 3
2019-09-17 08:43:07 207 210 4965 1
2019-09-17 08:43:08 234 250 5134 1
2019-09-17 08:43:08 252 222 5139 2
2019-09-17 08:43:08 206 210 4900 3
2019-09-17 08:43:09 252 222 4911 3
2019-09-17 08:43:09 206 210 4900 3
2019-09-17 08:43:09 223 247 4909 3
2019-09-17 08:43:10 206 210 5141 2
2019-09-17 08:43:10 229 237 4909 3
2019-09-17 08:43:10 252 222 5163 2
2019-09-17 08:43:12 226 241 5170 2
我该怎么做?这是任何人都可以帮助我解决的问题吗?
我很感激任何提示!
最佳答案
IIUC,首先让我们将最小值和最大值合并到您的数据框架结构中
import pandas as pd
import numpy as np
df3 = pd.merge(df,minmax,on='id',how='left')
date x y id min max
0 2019-09-17 08:43:06 206 210 4900 2019-09-17 08:43:06 2019-09-17 09:38:20
1 2019-09-17 08:43:06 234 236 4909 2019-09-17 08:43:06 2019-09-17 09:16:00
2 2019-09-17 08:43:06 251 222 4911 2019-09-17 08:43:06 2019-09-17 09:43:58
3 2019-09-17 08:43:07 231 244 4909 2019-09-17 08:43:06 2019-09-17 09:16:00
4 2019-09-17 08:43:07 252 222 4911 2019-09-17 08:43:06 2019-09-17 09:43:58
5 2019-09-17 08:43:07 207 210 4965 2019-09-17 09:27:14 2019-09-17 09:38:28
6 2019-09-17 08:43:08 234 250 5163 2019-09-17 09:38:03 2019-09-17 10:18:29
7 2019-09-17 08:43:08 252 222 4911 2019-09-17 08:43:06 2019-09-17 09:43:58
8 2019-09-17 08:43:08 206 210 4900 2019-09-17 08:43:06 2019-09-17 09:38:20
9 2019-09-17 08:43:09 252 222 4911 2019-09-17 08:43:06 2019-09-17 09:43:58
10 2019-09-17 08:43:09 206 210 4900 2019-09-17 08:43:06 2019-09-17 09:38:20
11 2019-09-17 08:43:09 223 247 4909 2019-09-17 08:43:06 2019-09-17 09:16:00
12 2019-09-17 08:43:10 206 210 4900 2019-09-17 08:43:06 2019-09-17 09:38:20
13 2019-09-17 08:43:10 229 237 4909 2019-09-17 08:43:06 2019-09-17 09:16:00
14 2019-09-17 08:43:10 252 222 4911 2019-09-17 08:43:06 2019-09-17 09:43:58
15 2019-09-17 08:43:12 226 241 4909 2019-09-17 08:43:06 2019-09-17 09:16:00
然后让我们计算出日期和最小值之间的绝对秒数总和。 如果您需要实际值,可以按原样读取值,但需要添加更多逻辑步骤来处理负值。
s = abs(df3['min'] - df3['date']) / np.timedelta64(1,'s')
print(s)
0 0.0
1 0.0
2 0.0
3 1.0
4 1.0
5 2647.0
6 3295.0
7 2.0
8 2.0
9 3.0
10 3.0
11 3.0
12 4.0
13 4.0
14 4.0
15 6.0
dtype: float64
您可以通过多种方式执行此操作,但我将仅使用 .loc
按顺序设置您的值。
df3.loc[s <= 3, 'GroupSize'] = 3
df3.loc[(s > 3) & (s <= 7), 'GroupSize'] = 2
df3.loc[s > 7, 'GroupSize'] = 1
<小时/>
print(df3[['id','date','x','y','min','GroupSize']])
id date x y min GroupSize
0 4900 2019-09-17 08:43:06 206 210 2019-09-17 08:43:06 3.0
1 4909 2019-09-17 08:43:06 234 236 2019-09-17 08:43:06 3.0
2 4911 2019-09-17 08:43:06 251 222 2019-09-17 08:43:06 3.0
3 4909 2019-09-17 08:43:07 231 244 2019-09-17 08:43:06 3.0
4 4911 2019-09-17 08:43:07 252 222 2019-09-17 08:43:06 3.0
5 4965 2019-09-17 08:43:07 207 210 2019-09-17 09:27:14 1.0
6 5163 2019-09-17 08:43:08 234 250 2019-09-17 09:38:03 1.0
7 4911 2019-09-17 08:43:08 252 222 2019-09-17 08:43:06 3.0
8 4900 2019-09-17 08:43:08 206 210 2019-09-17 08:43:06 3.0
9 4911 2019-09-17 08:43:09 252 222 2019-09-17 08:43:06 3.0
10 4900 2019-09-17 08:43:09 206 210 2019-09-17 08:43:06 3.0
11 4909 2019-09-17 08:43:09 223 247 2019-09-17 08:43:06 3.0
12 4900 2019-09-17 08:43:10 206 210 2019-09-17 08:43:06 2.0
13 4909 2019-09-17 08:43:10 229 237 2019-09-17 08:43:06 2.0
14 4911 2019-09-17 08:43:10 252 222 2019-09-17 08:43:06 2.0
15 4909 2019-09-17 08:43:12 226 241 2019-09-17 08:43:06 2.0
关于python - 根据我的 df 中 ID 的进入和退出时间确定组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59465127/