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

