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

如何按特殊条件合并两个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:19:29