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

如何为Pandas透视表添加筛选?OD行程数据多时段筛选问题

解决方法

问题根源

你多时段筛选代码无效的原因是误用了&(逻辑与)——同一行的Time字段不可能同时等于三个不同值,应该用isin()方法判断字段是否在目标时段列表中。

方法一:先筛选数据再生成透视表(推荐,效率更高)

先从原始50万+行数据中过滤出需要的3个时段,再制作透视表,能减少后续计算的数据量:

import pandas as pd
df = pd.read_excel('...xlsx')

# 定义需要保留的时段
target_times = ['7am', '4pm', 'All Day']
# 筛选出符合条件的数据
filtered_df = df[df['Time'].isin(target_times)]
# 生成透视表
pivot_table = filtered_df.pivot_table(
    index=['O', 'D'],
    columns=['Time'],
    values='Trips',
    aggfunc='sum'
)
print(pivot_table)

方法二:先生成全透视表再删除多余列

如果已经生成了全时段透视表,也可以直接删除不需要的列:

import pandas as pd
df = pd.read_excel('...xlsx')

# 生成全时段透视表
full_pivot = df.pivot_table(
    index=['O', 'D'],
    columns=['Time'],
    values='Trips',
    aggfunc='sum'
)
# 定义需要保留的时段
target_times = ['7am', '4pm', 'All Day']
# 筛选出需要删除的列
cols_to_drop = [col for col in full_pivot.columns if col not in target_times]
# 删除列(axis=1表示操作列维度)
filtered_pivot = full_pivot.drop(cols_to_drop, axis=1)
print(filtered_pivot)

关于透视表删列的疑问

完全可以从透视表中删除列,使用DataFrame.drop()方法并指定axis=1即可针对列进行删除操作,方法二就是具体实现示例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:27:07