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

如何筛选两个DataFrame并生成其共同筛选结果的新DataFrame?

问题修正与解决方案

1. 单个DataFrame筛选的错误修正

你写的loc筛选代码里用了and,这在pandas布尔索引中会报错——and是Python基础逻辑运算符,无法处理pandas的布尔序列。必须改用&,且每个条件要单独用括号包裹。同时统计符合条件的行数完全不需要写for循环,直接用len()或布尔序列求和即可,效率更高。

修正后的单个DataFrame筛选代码:

# 正确的布尔索引筛选
dfsorted = df.loc[(df['snapshotMp60sHighTicks'] < 0.25) & (df['snapshotMp60sLowTicks'] < -1.0)]

# 统计符合条件的样本数(替代原for循环)
sample_count = len(dfsorted)
# 或者用布尔序列求和,结果一致
sample_count = ((df['snapshotMp60sHighTicks'] < 0.25) & (df['snapshotMp60sLowTicks'] < -1.0)).sum()

2. 两个DataFrame的共同筛选实现

如果要生成两个DataFrame的共同筛选结果,分两种常见场景处理:

场景A:两个DataFrame共享相同索引,取同时满足各自条件的索引行

假设两个DataFrame为df1和df2,先分别筛选出符合条件的行,再取索引交集,最后合并或提取共同行:

import pandas as pd

# 筛选df1符合条件的行
df1_filtered = df1.loc[(df1['snapshotMp60sHighTicks'] < 0.25) & (df1['snapshotMp60sLowTicks'] < -1.0)]
# 筛选df2符合条件的行(条件可根据实际需求调整)
df2_filtered = df2.loc[(df2['snapshotMp60sHighTicks'] < 0.25) & (df2['snapshotMp60sLowTicks'] < -1.0)]

# 获取两个筛选结果的共同索引
common_indices = df1_filtered.index.intersection(df2_filtered.index)

# 生成包含共同结果的新DataFrame(这里以合并两个df的共同行为例)
combined_df = pd.concat([df1_filtered.loc[common_indices], df2_filtered.loc[common_indices]], axis=1)

场景B:两个DataFrame有共同标识列(如id),取满足条件且标识匹配的记录

如果两个DataFrame通过某列(比如唯一ID)关联,用merge取内连接即可:

import pandas as pd

# 分别筛选两个DataFrame
df1_filtered = df1.loc[(df1['snapshotMp60sHighTicks'] < 0.25) & (df1['snapshotMp60sLowTicks'] < -1.0)]
df2_filtered = df2.loc[(df2['snapshotMp60sHighTicks'] < 0.25) & (df2['snapshotMp60sLowTicks'] < -1.0)]

# 按共同列(如'id')取交集,生成新DataFrame
combined_df = pd.merge(df1_filtered, df2_filtered, on='id', how='inner')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:32:44