pd.query中是否存在可指代当前调用DataFrame的占位符?
问题解答
你要的占位符在pandas 0.23.0及以上版本中已内置支持,名称为@__self__,可直接在query/eval表达式中用于指代当前调用方法的DataFrame对象。
针对你给出的示例,直接把代码中的PLACEHOLDER替换为@__self__即可实现需求,完整可运行代码如下:
import pandas as pd import numpy as np # 构造示例多层列索引DataFrame df = pd.DataFrame( data=np.arange(20).reshape(5, 4), columns=pd.MultiIndex.from_product([['A', 'B'], ['x', 'y']]) ) # 无需定义临时变量,直接用@__self__指代切片生成的未命名DataFrame filtered_df = df.loc[:, (slice(None), 'y')].query('(@__self__ > 15).any(axis=1)') print(filtered_df)
运行后输出结果为:
A B y y 4 17 19
注意事项
- 使用时必须添加
@前缀,否则pandas会将__self__识别为列名,抛出找不到对应列的报错 - 该占位符同时适用于
pd.DataFrame.eval()方法,使用逻辑完全一致 - 链式调用场景下使用该占位符可以避免定义大量临时变量,有效简化代码
内容的提问来源于stack exchange,提问作者zeawoas
相关产品推荐
相关产品推荐

