如何按特殊条件合并两个DataFrame:筛选Class从A变B的客户
解决方法:找出Class从A变为B的客户记录
嘿,这个需求在用户行为分析或者数据追踪场景里挺常见的,用Pandas处理起来非常直观。我给你两种实用的解法,你可以根据自己的数据集大小和后续需求来选择:
首先,先构造示例数据
先把你给出的两个DataFrame用代码还原出来,方便后续测试:
import pandas as pd # 第一个DataFrame(初始状态) df_initial = pd.DataFrame({ 'customer_id': [1, 2, 3], 'Class': ['A', 'A', 'B'], 'value': [13, 14, 15] }) # 第二个DataFrame(更新后状态) df_updated = pd.DataFrame({ 'customer_id': [1, 2, 3, 4], 'Class': ['A', 'B', 'B', 'A'], 'value': [16, 17, 18, 20] })
解法一:先缩小范围再筛选(高效优先)
这种方法先从初始DataFrame里把Class为A的客户ID提取出来,再到更新后的DataFrame里找这些客户中Class变成B的记录,适合大数据集场景:
# 第一步:获取初始状态中Class为A的客户ID集合 a_customers = df_initial[df_initial['Class'] == 'A']['customer_id'] # 第二步:在更新后的DataFrame中筛选符合条件的记录 result = df_updated[(df_updated['customer_id'].isin(a_customers)) & (df_updated['Class'] == 'B')] # 查看结果 print(result)
运行后输出就是你要的结果:
customer_id Class value 1 2 B 17
解法二:合并后对比变化(直观优先)
如果你需要清晰看到客户Class的前后变化,或者后续要分析其他类型的变化(比如B变A),可以先把两个DataFrame合并,再筛选目标条件:
# 合并两个DataFrame,保留初始Class和更新后的所有字段 merged_df = pd.merge( df_initial[['customer_id', 'Class']].rename(columns={'Class': 'old_Class'}), df_updated, on='customer_id', how='inner' # 只保留两个DataFrame都存在的客户 ) # 筛选初始Class为A、更新后为B的记录,保留需要的列 result = merged_df[(merged_df['old_Class'] == 'A') & (merged_df['Class'] == 'B')][['customer_id', 'Class', 'value']] # 查看结果 print(result)
这个方法的好处是能保留old_Class字段,方便你后续扩展分析其他变化类型,比如想找从B变A的客户也很容易。
内容的提问来源于stack exchange,提问作者Homesand
相关产品推荐
相关产品推荐

