如何判断df1球员是否在df2中并更新Matched与Description列?
实现方法
针对大型DataFrame,推荐使用向量化操作保证效率,避免逐行遍历的性能损耗。具体步骤如下:
- 定义目标字符串:
x = 'basketball player'
- 提取
df2中所有运动员姓名的集合(集合的成员查询效率远高于DataFrame列查询):
df2_player_set = set(df2['Player'])
- 利用
pandas的isin方法结合numpy.where批量填充df1的Matched和Description列:
import numpy as np import pandas as pd # 填充Matched列 df1['Matched'] = np.where(df1['Player'].isin(df2_player_set), df1['Player'], np.nan) # 填充Description列 df1['Description'] = np.where(df1['Player'].isin(df2_player_set), x, np.nan)
执行结果
处理后的df1与预期完全一致:
| Player | Team | Matched | Description |
|---|---|---|---|
| Michael Jordan | Chicago Bulls | Michael Jordan | basketball player |
| Kobe Bryant | Los Angeles Lakers | Kobe Bryant | basketball player |
| Lebron James | Los Angeles Lakers | nan | nan |
补充说明
- 如果需要不区分大小写的匹配,可以先将两列统一转为小写再判断:
df2_player_set = set(df2['Player'].str.lower()) df1['Matched'] = np.where(df1['Player'].str.lower().isin(df2_player_set), df1['Player'], np.nan) df1['Description'] = np.where(df1['Player'].str.lower().isin(df2_player_set), x, np.nan) - 向量化操作相比
apply方法,在处理百万级以上数据时性能提升明显,更适合大型DataFrame场景。
内容的提问来源于stack exchange,提问作者lordgriffith
相关产品推荐
相关产品推荐

