如何用唯一标识符统计两个DataFrame指定条件的匹配数?(Python)
统计符合条件的ID匹配数量
直接用Pandas的合并+条件筛选就能解决循环带来的歧义问题,步骤如下:
- 合并两个DataFrame
通过唯一标识符id将df1和df2内连接,确保同一id的snack和treat字段对应到同一行,避免循环时的匹配歧义。
merged_df = pd.merge(df1, df2, on='id', how='inner')
- 定义筛选条件并统计数量
直接通过布尔数组筛选符合要求的行,再统计数量(布尔值的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
相关产品推荐
相关产品推荐

