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

基于DataFrame共有列匹配统计符合条件行数的技术求助

解决DataFrame行匹配计数问题

问题需求

统计DataFrame df中每行与df2共有列(A、B、C)值完全匹配的行数,生成带Count列的结果。

示例数据

import pandas as pd

df = pd.DataFrame([{'id':1, 'A': 'False', 'B' : 'False' , 'C':'NA'},{'id':2, 'A': 'True', 'B' : 'False' , 'C':'NA'}])
df2 = pd.DataFrame([{'A':'True', 'B': 'False' , 'C':'NA', 'D': 'True'}])

df表格:

idABC
1FalseFalseNA
2TrueFalseNA

df2表格:

ABCD
TrueFalseNATrue

期望输出

idABCCount
1FalseFalseNA0
2TrueFalseNA1

尝试的无效代码

for i in range(columns):
    x = action_value_counts_df.columns[i]
    if compare_column.equals(action_value_counts_df[x]):
        print(x, 'Matched')
    else:
        print(x,'Not Matched')

正确实现方案

方案1:合并+分组计数

通过统计df2中匹配组合的出现次数,再与原表左连接得到结果:

import pandas as pd

# 初始化数据
df = pd.DataFrame([{'id':1, 'A': 'False', 'B' : 'False' , 'C':'NA'},{'id':2, 'A': 'True', 'B' : 'False' , 'C':'NA'}])
df2 = pd.DataFrame([{'A':'True', 'B': 'False' , 'C':'NA', 'D': 'True'}])

# 定义共有列
common_cols = ['A', 'B', 'C']

# 统计df2中各组合的出现次数
match_counts = df2[common_cols].value_counts().reset_index(name='Count')

# 左连接到原df,缺失值填充为0
result = df.merge(match_counts, on=common_cols, how='left').fillna({'Count': 0})

# 确保Count为整数类型
result['Count'] = result['Count'].astype(int)

print(result)

运行输出:

id      A      B    C  Count
0   1  False  False   NA      0
1   2   True  False   NA      1

方案2:逐行判断匹配

将df2的匹配组合转为集合,逐行检查是否存在:

import pandas as pd

# 初始化数据
df = pd.DataFrame([{'id':1, 'A': 'False', 'B' : 'False' , 'C':'NA'},{'id':2, 'A': 'True', 'B' : 'False' , 'C':'NA'}])
df2 = pd.DataFrame([{'A':'True', 'B': 'False' , 'C':'NA', 'D': 'True'}])

common_cols = ['A', 'B', 'C']

# 生成df2的匹配组合集合
df2_match_set = set(tuple(row) for row in df2[common_cols].values)

# 逐行判断并添加Count列
df['Count'] = df[common_cols].apply(lambda row: 1 if tuple(row) in df2_match_set else 0, axis=1)

print(df)

该方案直接在原df上生成结果,输出与方案1一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:40:23