使用Pandas assign()创建临时列后无法过滤的解决方法
问题解决:Pandas assign()创建的临时列无法被loc识别
错误原因
你代码里的df.assign(...)会返回一个包含新列的临时DataFrame,但原df并没有被修改,而你在loc里用df.PROMO_TXN_CNT_LTM_RATE调用的是原DataFrame的列,自然会提示未识别。
解决方法
方法1:先保存assign结果到变量,再过滤
把生成临时列的DataFrame存下来,后续操作基于这个新变量:
# 生成带临时列的DataFrame并保存 temp_df = df.assign(PROMO_TXN_CNT_LTM_RATE = df.PROMO_TXN_CNT_LTM / df.TXN_CNT_LTM) # 基于新变量过滤 result = temp_df.loc[temp_df.PROMO_TXN_CNT_LTM_RATE > 1]
方法2:链式调用中用lambda访问临时列
如果不想额外定义变量,可以用lambda在loc里引用assign返回的临时DataFrame:
result = df.assign(PROMO_TXN_CNT_LTM_RATE = df.PROMO_TXN_CNT_LTM / df.TXN_CNT_LTM).loc[lambda x: x.PROMO_TXN_CNT_LTM_RATE > 1]
这里的x就是assign返回的、包含新列的DataFrame,能正确识别PROMO_TXN_CNT_LTM_RATE。
方法3:直接在loc中计算过滤条件(无需临时列)
如果不需要保留这个临时列,直接把计算逻辑写进loc的条件里更简洁:
result = df.loc[(df.PROMO_TXN_CNT_LTM / df.TXN_CNT_LTM) > 1]
内容的提问来源于stack exchange,提问作者user7560913
相关产品推荐
相关产品推荐

