如何统计一个DataFrame的元素在另一个DataFrame中的出现次数
实现方案(Python Pandas)
前置准备:构造示例测试数据
import pandas as pd # 输入df1:含a1、a2两列 df1 = pd.DataFrame({ "a1": ["A", "B", "F", "A"], "a2": ["C", "D", "D", "D"] }) # 输入df2:含emi_1、emi_2两列,补充业务所需的IMEI列(可根据你的实际数据替换) df2 = pd.DataFrame({ "IMEI": ["IMEI_001", "IMEI_002", "IMEI_003", "IMEI_004"], "emi_1": ["A", "B", "C", "G"], "emi_2": ["C", "L", "N", "D"] })
步骤1:统计df1所有元素的出现频次
先把df1的两列合并成一维序列,直接统计每个值的出现次数,存为字典方便后续快速匹配:
df1_all_vals = pd.concat([df1["a1"], df1["a2"]]) val_count_map = df1_all_vals.value_counts().to_dict()
步骤2:匹配df2元素的出现次数
对df2的emi_1、emi_2两列每个值,匹配刚才生成的频次字典,无匹配则返回0:
# 自定义匹配函数 def count_occur(value): return val_count_map.get(value, 0) # 新增列存储统计结果 df2["emi_1_df1_count"] = df2["emi_1"].apply(count_occur) df2["emi_2_df1_count"] = df2["emi_2"].apply(count_occur)
步骤3:按IMEI分组输出结果
# 按IMEI分组聚合,若有多个同IMEI行可自定义聚合规则,这里取明细展示 final_result = df2.groupby("IMEI", as_index=False).first() print(final_result)
输出结果说明
最终输出格式示例:
| IMEI | emi_1 | emi_2 | emi_1_df1_count | emi_2_df1_count |
|---|---|---|---|---|
| IMEI_001 | A | C | 2 | 1 |
| IMEI_002 | B | L | 1 | 0 |
| IMEI_003 | C | N | 0 | 0 |
| IMEI_004 | G | D | 0 | 3 |
频次校验参考:df1中A出现2次、B出现1次、C出现1次、D出现3次、F出现1次,其余值无出现记录
内容的提问来源于stack exchange,提问作者Zulqarnain Sabir
相关产品推荐
相关产品推荐

