pandas如何筛选DataFrame中指定司机对应的所有驾驶行为计数数据
实现方法
你看到的同一司机后续行CHAUFFEUR字段为空,只是pandas对多级索引结果的默认打印折叠效果,并非数据本身真的存在空值,筛选时不需要手动补全这些显示层面的空内容,按以下两种方案实现即可:
方案1:保留多级索引直接查询
适合后续还需要做多维度分组计算的场景,直接用.loc按第一级索引(司机维度)切片取值即可:
# 存储你原代码生成的分组统计结果 stats_df = pd.DataFrame(df.groupby(['CHAUFFEUR','comportement de conduit'])['comportement de conduit'].count()) # 筛选指定司机的全部驾驶行为及对应计数 target_driver = "ABBOU ABD EL KADER" driver_result = stats_df.loc[target_driver]
返回结果的索引为该司机关联的所有驾驶行为类型,值为对应计数。
方案2:转换为普通扁平表查询(推荐)
多级索引的折叠显示容易造成误解,可以直接把分组结果重置为普通列结构,后续筛选、导出都和常规DataFrame操作逻辑一致,更易维护:
# 更简洁高效的统计写法:用size直接统计每组行数,结果和原代码count逻辑一致,重置索引后无折叠显示问题 stats_df = df.groupby(['CHAUFFEUR', 'comportement de conduit']).size().reset_index(name='计数') # 按司机名筛选,逻辑和普通表条件筛选完全一致 target_driver = "ABBOU ABD EL KADER" driver_result = stats_df[stats_df['CHAUFFEUR'] == target_driver]
返回结果包含司机名、驾驶行为类型、对应计数三列,无显示空值问题。
提示:如果需要批量遍历所有司机的统计结果,直接对多级索引结果按第一级循环即可,不需要单独写筛选逻辑:
for driver_name, driver_data in stats_df.groupby(level=0): # driver_name为当前司机名,driver_data对应该司机的所有驾驶行为统计数据 print(driver_name, driver_data)
内容的提问来源于stack exchange,提问作者miss-chl
相关产品推荐
相关产品推荐

