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

如何根据Pandas DataFrame首列id值拆分生成两个独立子集?

错误原因

你遇到的报错是因为pd.DataFrame.query()方法只接受字符串格式的查询表达式,你传入的dfr.iloc[:,0]==86返回的是布尔类型的Series,不符合入参要求。

实现方案

下面提供3种可直接运行的实现方式:

方案1:布尔索引(最简洁,无需修改原数据)

直接用布尔条件做行筛选,是 Pandas 最常用的筛选写法:

# 筛选id为86的所有行
df_86 = dfr[dfr.iloc[:, 0] == 86]
# 筛选id为87的所有行
df_87 = dfr[dfr.iloc[:, 0] == 87]

方案2:query方法(符合你想用query的需求)

因为你读取数据时没有指定表头,默认列名是整数0、1、2,写查询字符串时数字列名需要用反引号包裹:

df_86 = dfr.query("`0` == 86")
df_87 = dfr.query("`0` == 87")

如果先给列指定语义化名称,代码可读性会更高:

# 先重命名列
dfr.columns = ['id', 'datetime', 'value']
# 再用query查询
df_86 = dfr.query("id == 86")
df_87 = dfr.query("id == 87")

方案3:groupby批量拆分(适合id取值多的场景)

如果后续id取值变多,不需要逐个写筛选条件,用groupby批量拆分更高效:

# 按第一列分组后转成字典,key为id值,value为对应DataFrame
id_groups = dict(tuple(dfr.groupby(dfr.iloc[:, 0])))
# 直接按id取值获取对应数据
df_86 = id_groups[86]
df_87 = id_groups[87]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:06:06