如何为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
相关产品推荐
相关产品推荐

