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

基于多行条件过滤议会法案数据:剔除含两个Yes的案例

议会法案数据过滤的优雅实现方案

方法1:分组直接过滤(无需辅助DataFrame)

  • 核心逻辑:按法案名称分组后,直接在分组内统计"Yes"出现次数,同时限定仅保留法案A且次数不等于2的记录
  • 代码实现:
import pandas as pd

# 假设原数据包含列:`法案名称`、`事件结果`
filtered_data = df.groupby('法案名称').filter(
    lambda group: (group['事件结果'].eq('Yes').sum() != 2) and (group.name == '法案A')
)
  • 优势:无需生成额外统计表,直接在分组操作中完成筛选,代码紧凑直观。

方法2:transform+布尔索引组合筛选

  • 核心逻辑:用transform将分组统计的"Yes"次数映射回每一行,再通过布尔索引直接筛选目标数据
  • 代码实现:
# 为每一行添加对应法案的Yes出现次数
df['yes_count'] = df['事件结果'].eq('Yes').groupby(df['法案名称']).transform('sum')

# 筛选符合条件的记录
filtered_data = df[(df['法案名称'] == '法案A') & (df['yes_count'] != 2)].drop('yes_count', axis=1)
  • 优势:逻辑清晰,transform避免了分组后合并的繁琐步骤,直接完成结果映射,性能更优。

方法3:链式调用精简写法

  • 核心逻辑:通过链式调用整合计算、筛选、清理步骤,全程无额外中间变量
  • 代码实现:
filtered_data = (df
                 .assign(yes_count=lambda x: x['事件结果'].eq('Yes').groupby(x['法案名称']).transform('sum'))
                 .query('法案名称 == "法案A" and yes_count != 2')
                 .drop('yes_count', axis=1)
)
  • 优势:符合pandas惯用的链式风格,代码可读性强,无需分散的变量操作。

内容的提问来源于stack exchange,提问作者Nick Glättli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:43:22