基于Pandas计算芝加哥出租车数据各ID时段数值总和及全体ID中位数
解决芝加哥出租车行程数据的统计需求
咱们直接上手,用Pandas一步步实现你要的统计逻辑:
1. 先筛选指定时间段内的数据
因为你的时间戳已经是Pandas datetime格式了,直接用布尔索引就能轻松过滤出目标时间段的数据。比如假设你要统计2016年1月到6月的行程,代码如下:
# 定义你的目标时间段,替换成实际需要的起止时间 start_date = '2016-01-01' end_date = '2016-06-30' # 生成筛选掩码 time_mask = (df['Trip End Timestamp'] >= start_date) & (df['Trip End Timestamp'] <= end_date) # 得到筛选后的数据集 filtered_trips = df[time_mask] # 可选:如果Taxi ID有缺失值,提前过滤掉,避免无效分组 filtered_trips = filtered_trips.dropna(subset=['Taxi ID'])
2. 计算每个Taxi ID的行程总金额之和
按Taxi ID分组,对Trip Total列求和,得到每个出租车的总营收:
# 分组求和 taxi_total_fares = filtered_trips.groupby('Taxi ID')['Trip Total'].sum()
这时候taxi_total_fares是一个Series,索引是唯一的Taxi ID,值是对应ID的总行程金额。
3. 计算所有Taxi ID总和的中位数
直接调用Pandas的median()方法就能得到中位数:
# 计算中位数 total_median = taxi_total_fares.median() # 打印结果 print(f"所有出租车行程总金额的中位数: {total_median}")
如果需要把这几步合并成一行(虽然可读性会差一点),也可以这样写:
total_median = df[(df['Trip End Timestamp'] >= '2016-01-01') & (df['Trip End Timestamp'] <= '2016-06-30')].dropna(subset=['Taxi ID']).groupby('Taxi ID')['Trip Total'].sum().median()
小提示
- 确保你的
Trip End Timestamp列确实是datetime类型,如果不是的话,先转一下:df['Trip End Timestamp'] = pd.to_datetime(df['Trip End Timestamp']) - 如果要统计的不是
Trip Total,而是其他数值列,替换对应的列名就行~
内容的提问来源于stack exchange,提问作者HighVoltage
相关产品推荐
相关产品推荐

