gpt4 book ai didi

python - 在 python 中提取数据帧的 groupby 值

转载 作者:行者123 更新时间:2023-12-04 10:58:18 38 4
gpt4 key购买 nike

我有一个带列的数据框 Timestamp , Longitude , Latitude .我已经提取了列 Distance每套之间longitudelatitude .
数据集的问题陈述是extract the location between which the vehicle is at halt..所以我使用的概念是,if i+1 value is less than 500m它被视为 halt .我想提取对停止值的观察。
示例:如果它停止,我想提取第一个经度和纬度以及最后一个。时间戳也类似。我写了下面的代码

df["Status"] = 'M'

for i in range(len(df)-1):
if (df.loc[i+1,'Distance_km'] <= 0.5):
df.loc[i+1, "Status"]='H'

最初我创建了一个带有值的列 M对所有人。我把它改成了 H如果距离小于500m。

如何提取?

我拥有的数据帧片段:
enter image description here

我想要的输出:
enter image description here

最佳答案

让我们假设这是您的数据框(我在大多数情况下用随机数填充了它):

df = pd.DataFrame({'lon': np.random.uniform(size=10), 'lat': np.random.uniform(size=10), 'time': np.arange(10), 'dist': [0,0,10,15,0.25,0,0,12,13,14]})

lon lat time dist
0 0.934316 0.577665 0 0.00
1 0.126991 0.665957 1 0.00
2 0.526884 0.590803 2 10.00
3 0.652709 0.873958 3 15.00
4 0.967095 0.320934 4 0.25
5 0.479600 0.012705 5 0.00
6 0.243327 0.117992 6 0.00
7 0.788706 0.193073 7 12.00
8 0.172656 0.166983 8 13.00
9 0.661242 0.030701 9 14.00

使用 pd.Series.where ,您可以标记暂停的行。此列中的对应于正在停止的车辆。
df['halted'] = df.dist.where(df.dist > 0.5, 1).where(df.dist <= 0.5, 0)

lon lat time dist halted
0 0.934316 0.577665 0 0.00 1.0
1 0.126991 0.665957 1 0.00 1.0
2 0.526884 0.590803 2 10.00 0.0
3 0.652709 0.873958 3 15.00 0.0
4 0.967095 0.320934 4 0.25 1.0
5 0.479600 0.012705 5 0.00 1.0
6 0.243327 0.117992 6 0.00 1.0
7 0.788706 0.193073 7 12.00 0.0
8 0.172656 0.166983 8 13.00 0.0
9 0.661242 0.030701 9 14.00 0.0

现在用于提取您想要的值。首先,我将介绍一个列来识别不同的停止组
df['group'] = (np.abs(df.halted.diff()).cumsum().fillna(0) + 1) * df.halted

lon lat time dist halted group
0 0.934316 0.577665 0 0.00 1.0 1.0
1 0.126991 0.665957 1 0.00 1.0 1.0
2 0.526884 0.590803 2 10.00 0.0 0.0
3 0.652709 0.873958 3 15.00 0.0 0.0
4 0.967095 0.320934 4 0.25 1.0 3.0
5 0.479600 0.012705 5 0.00 1.0 3.0
6 0.243327 0.117992 6 0.00 1.0 3.0
7 0.788706 0.193073 7 12.00 0.0 0.0
8 0.172656 0.166983 8 13.00 0.0 0.0
9 0.661242 0.030701 9 14.00 0.0 0.0

现在每个暂停组都被分配了大于零的整数。有了这个,您可以使用 pd.DataFrame.groupby积累你的值(value)。
aggregated = df.groupby('group')['lon', 'lat', 'time'].agg(['first', 'last']).iloc[1:]

lon lat time
first last first last first last
group
1.0 0.934316 0.126991 0.577665 0.665957 0 1
3.0 0.967095 0.243327 0.320934 0.117992 4 6

最后,计算时间差并删除未使用的列:
aggregated['time_diff'] = aggregated.time['last'] - aggregated.time['first']
aggregated = aggregated.drop(columns=['time'])

lon lat time_diff
first last first last
group
1.0 0.934316 0.126991 0.577665 0.665957 1
3.0 0.967095 0.243327 0.320934 0.117992 2

使用 group变量,如果您需要那里的数据,您可以将结果连接回另一个数据框

关于python - 在 python 中提取数据帧的 groupby 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59028257/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com