You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Pandas DataFrame添加行程记录数列并过滤短行程?

解决Pandas按TripID添加行程长度并过滤的问题

嘿,这个问题我之前也碰到过,其实Pandas里有两个超好用的方法能直接解决你的需求,不管是给每行匹配对应TripID的记录数,还是后续过滤行程,都能轻松搞定!

第一步:给每行添加对应TripID的记录数

你已经通过lengths = df['TripID'].value_counts()拿到了每个行程的记录数,现在只需要把这些值映射回原DataFrame的对应行就行,这里有两种简单的实现方式:

方法1:使用map()方法

map()会自动根据TripID的值,从lengths里找到对应的记录数并填充到新列,完全不用手动匹配:

# 你已经拿到的行程记录数
lengths = df['TripID'].value_counts()
# 添加length列
df['length'] = df['TripID'].map(lengths)

方法2:使用groupby() + transform()方法

如果不想单独生成lengths变量,也可以直接通过分组计算,transform()会把每组的计算结果广播到组内的每一行,一步到位:

df['length'] = df.groupby('TripID')['TripID'].transform('count')

这两种方法都会得到你期望的输出:

TripID    Lat    Lon  time  length
0      42  53.55   9.99    74       3
1      42  53.58   9.99    78       3
3      42  53.60   9.98    79       3
6      12  52.01  10.04    64       2
7      12  52.34  10.05    69       2

第二步:过滤记录数少于最小值的行程

有了length列之后,过滤就非常简单了,直接用布尔索引筛选符合条件的行即可。比如你要保留记录数≥2的行程:

# 设置最小记录数
min_trip_length = 2
# 过滤
filtered_df = df[df['length'] >= min_trip_length]

如果你的最小记录数是3,那只会保留TripID为42的行程,完全满足你的需求。

为什么之前匹配不上?

估计你之前尝试了直接赋值或者其他方式,但没有按TripID做对应映射。而map()和transform()都是基于TripID的键值自动匹配的,所以不会出现行不对应的问题。

内容的提问来源于stack exchange,提问作者Jan Kaiser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:33:18