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

如何提取一个dataframe中列值存在于另一个dataframe的对应行

问题解决方法

原有代码错误原因

  • 你定义的df1、df2初始为Python字典,需要先转换为Pandas的DataFrame对象才能按DataFrame的逻辑操作
  • 直接用for row in df1遍历DataFrame时,默认遍历的是列名而非行数据,无法获取每行的Stream字段值
  • 比较逻辑不成立:row['Stream'] == df2['Test']是将单个字符串和整个Series做对比,返回的是布尔数组,不能直接作为if判断的条件

正确实现代码

推荐使用Pandas内置的isin()向量化方法,效率更高,无需手动写循环:

import pandas as pd

# 先将字典转换为DataFrame
df1 = pd.DataFrame({'Stream': ['Netflix', 'Hulu', 'YouTube', 'Aprime', 'HBO', 'Peacock', 'Tubi'],
       'Percent': [51, 19, 40, 18, 35, 12, 7]})
df2 = pd.DataFrame({'Test': ['Hulu', 'Netflix', 'Disney']})

# 筛选df1中Stream字段存在于df2的Test字段中的行
result = df1[df1['Stream'].isin(df2['Test'])]
print(result)

运行后输出结果如下:

Stream  Percent
0  Netflix       51
1     Hulu       19

如果需要和你预期的输出顺序一致(Hulu在前、Netflix在后),可以额外补充匹配df2顺序的逻辑:

result = df1[df1['Stream'].isin(df2['Test'])].set_index('Stream').reindex(df2['Test'].dropna()).dropna().reset_index()

如果你一定要用循环实现,可以修改为如下写法,但不推荐,数据量大时效率远低于向量化操作:

# 循环实现(不推荐)
target_streams = df2['Test'].tolist()
for _, row in df1.iterrows():
    if row['Stream'] in target_streams:
        print(row)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:57:03