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

如何用唯一标识符统计两个DataFrame指定条件的匹配数?(Python)

统计符合条件的ID匹配数量

直接用Pandas的合并+条件筛选就能解决循环带来的歧义问题,步骤如下:

  1. 合并两个DataFrame
    通过唯一标识符id将df1和df2内连接,确保同一id的snack和treat字段对应到同一行,避免循环时的匹配歧义。
merged_df = pd.merge(df1, df2, on='id', how='inner')
  1. 定义筛选条件并统计数量
    直接通过布尔数组筛选符合要求的行,再统计数量(布尔值的sum()会自动计数True的个数):
# 条件1:snack为chips且treat为brownie
cond1 = (merged_df['snack'] == 'chips') & (merged_df['treat'] == 'brownie')
# 条件2:snack为pretzels且treat为cake
cond2 = (merged_df['snack'] == 'pretzels') & (merged_df['treat'] == 'cake')

# 统计两个条件的总匹配数
total_matches = (cond1 | cond2).sum()

完整可运行示例

import pandas as pd

# 构建示例数据
df1 = pd.DataFrame({
    'id': [456, 123, 789, 246],
    'snack': ['chips', 'pretzels', 'chips', 'pretzels']
})

df2 = pd.DataFrame({
    'id': [123, 789, 246, 456],
    'treat': ['cake', 'brownie', 'brownie', 'brownie']
})

# 合并数据
merged_df = pd.merge(df1, df2, on='id', how='inner')

# 计算匹配数
cond1 = (merged_df['snack'] == 'chips') & (merged_df['treat'] == 'brownie')
cond2 = (merged_df['snack'] == 'pretzels') & (merged_df['treat'] == 'cake')
total_matches = (cond1 | cond2).sum()

print(f"符合条件的匹配数量: {total_matches}")

运行结果为3,对应id为456、789、123的三条记录。

为什么循环会报"ambiguous"错误?

循环处理时如果没有严格对齐id的索引或匹配关系,比如df1和df2的id顺序不一致、存在重复id,就会出现匹配歧义。用merge方法能自动按id配对,从根源避免这类问题,同时比循环更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:48:18