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

