如何仅当Name为John时执行Pandas Merge,其余显示0?
实现Pandas条件合并逻辑
需求说明:现有两个DataFrame,仅当Name字段为John时,合并并显示df2中对应的Class值,其余行的Class字段显示0。
步骤1:准备数据与基础合并
先执行左连接合并,确保保留df1的所有行,并匹配df2中的对应数据:
import pandas as pd import numpy as np # 定义原始DataFrame df1 = pd.DataFrame({'Name': ['John', 'Tom', 'Simon', 'Jose'], 'Age': [5, 6, 4, 5]}) df2 = pd.DataFrame({'Name': ['John', 'Tom', 'Jose'], 'Class': ['Second', 'Third', 'Fifth']}) # 左连接合并两个DataFrame merged_df = df1.merge(df2, on='Name', how='left')
步骤2:按条件替换Class字段
用高效的numpy.where方法,仅保留Name为John的Class值,其余替换为0:
merged_df['Class'] = np.where(merged_df['Name'] == 'John', merged_df['Class'], 0)
如果不想引入numpy,也可以用apply方法实现:
merged_df['Class'] = merged_df.apply(lambda row: row['Class'] if row['Name'] == 'John' else 0, axis=1)
最终结果
执行上述代码后,输出的merged_df如下:
Name Age Class 0 John 5 Second 1 Tom 6 0 2 Simon 4 0 3 Jose 5 0
内容的提问来源于stack exchange,提问作者spartacus8w2039
相关产品推荐
相关产品推荐

