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

如何在for循环中为DataFrame.query指定动态列名?

使用Pandas的df.query在循环中动态指定列名

我有一个包含70列、数百万行的DataFrame,需要针对不同列的条件重复执行筛选及后续操作。示例DataFrame如下:

index  target1  ignore1  tar2  tar3 ignore2
0      1        0      the     1     0     nor
1      2        1    value     0     1    does
2      3        0  doesn't     1     1      it
3      4        1   matter     1     1  matter
4      5        0     here     0     1    here

最初尝试通过循环遍历目标列列表,用循环变量作为列名执行df.query筛选,代码如下:

targets = ['target1', 'tar2', 'tar3']
for target in targets:
     df.query('@target == 1')

但搜索到的资料仅说明df.query('column_name == @variable')这类用变量替代值的用法,未明确能否用循环变量替代列名。尝试多种括号写法均失败,后续补充测试示例:

data = {
  "name": ["Sally", "Mary", "John"],
  "age": [50, 40, 30],
    "race": ["H", "B", "W"],
    "Male": [0, 0, 1],
    "Rich": [0, 1, 0]}

df = pd.DataFrame(data)

categories = ("Rich", "Male")
for cat in categories:
    data_test = df.query("(@cat == 1) and (race.isin(['H', 'B']))")
    print(data_test.age.median())

最终找到可行方案:使用f-string格式化query语句,将循环变量直接作为列名嵌入查询字符串中,代码如下:

categories = ("Rich", "Male")
for cat in categories:
    data_test = df.query(f"({cat} == 1) and (race.isin(['H', 'B']))")
    print(data_test.age.median())

该方案可正常运行,实现了在循环中动态指定df.query的列名进行筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:50:33