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

使用isin()筛选Period类型字段失败,直接==对比正常的问题

问题根源与解决办法

你的Quarter字段是period[Q-DEC]类型,传给isin()的是字符串列表,类型不匹配导致筛选失效;但直接用==时,Pandas会自动做隐式类型转换,所以能正常匹配。

修复方案

方案1:用Period对象匹配(推荐)

把筛选的季度字符串转为和目标列同频率的Period对象,再传入isin():

import pandas as pd
import numpy as np

# 构造同频率的Period对象列表
target_quarters = [pd.Period('2022Q3', freq='Q-DEC'), pd.Period('2022Q4', freq='Q-DEC')]
filter = (df_1['Year'] == 2022) & (df_1['Quarter'].isin(target_quarters))
df_incumbent = df_1[filter].groupby(['Lane', 'Carrier Scac', 'Quarter']).agg(
    {'Cust Linehaul': np.mean, 'Load Number': 'count'}
).unstack('Quarter', fill_value=0)  # 计数/均值用0代替NaN更合理

方案2:转字符串后匹配

将Quarter列临时转为字符串类型,再用原字符串列表筛选:

import numpy as np

filter = (df_1['Year'] == 2022) & (df_1['Quarter'].astype(str).isin(['2022Q3', '2022Q4']))
df_incumbent = df_1[filter].groupby(['Lane', 'Carrier Scac', 'Quarter']).agg(
    {'Cust Linehaul': np.mean, 'Load Number': 'count'}
).unstack('Quarter', fill_value=0)

为什么直接==能生效?

Pandas处理单个值的==比较时,会自动把右侧的字符串解析为与左侧Period同频率的Period对象,所以匹配成功;但isin()不会做这种自动类型转换,必须保证列表元素类型和目标列一致,否则会返回全False的筛选结果,最终得到空DataFrame。

内容的提问来源于stack exchange,提问作者Rajib Lochan Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:46:05