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

如何在Python中基于两个关联数据集的条件创建第三个数据集?

解决基于两个关联DataFrame筛选数据的问题

看起来你是想从df里挑出那些在fp中FP字段为'fp'的对应行,只保留ID、P1、P2这三列对吧?你之前用np.where的写法确实有问题,咱们来一步步解决这个问题。

首先先明确你的原始数据:

import pandas as pd

df = pd.DataFrame(columns=['ID','P1','P2'], data=[[1, 2, 0], [2,1,0], [3, 1, 2], [4, 2, 1], [5, 1, 2], [6, 0, 1], [7, 1, 0]])
fp = pd.DataFrame(columns=['ID','FP'], data=[[1, 'fp'], [2,'i'], [3, 'i'], [4, 'fp'], [5, 'fp'], [6, 'fp'], [7, 'i']])

方法1:合并DataFrame后筛选

这是最直观的方式,先把两个表按ID关联起来,再筛选出FP为'fp'的行,最后保留你需要的列:

# 按ID合并两个表
merged_data = pd.merge(df, fp, on='ID')
# 筛选FP为'fp'的行,只保留指定列
df2 = merged_data[merged_data['FP'] == 'fp'][['ID', 'P1', 'P2']]

方法2:先提取符合条件的ID再筛选

如果你的数据量比较大,这种方法效率会更高——先从fp里把FP为'fp'的ID提取出来,再用这个ID列表去df里过滤:

# 提取所有FP为'fp'的ID
target_ids = fp[fp['FP'] == 'fp']['ID'].tolist()
# 在df中筛选ID在目标列表里的行
df2 = df[df['ID'].isin(target_ids)]

为什么你之前的代码不行?

你写的np.where((df['ID']==fp['ID'])&fp['FP']=='fp')有两个问题:

  • 语法错误:你少了一个闭合的括号,正确的语法应该是np.where((df['ID']==fp['ID']) & (fp['FP']=='fp'))
  • 逻辑问题:np.where在这里不适合做关联筛选——如果两个DataFrame的行顺序不一致,df['ID']==fp['ID']的逐行比较会完全出错;而且np.where返回的是满足条件的索引位置,不是直接生成你需要的DataFrame。

用上面两种方法都能得到你想要的结果,运行后df2的输出应该是:

ID  P1  P2
0   1   2   0
1   4   2   1
2   5   1   2
3   6   0   1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:12:31