Python Pandas:如何筛选两列值匹配且属指定列表的行?
Pandas DataFrame 筛选符合条件的行
需求分析
需要筛选同时满足以下两个条件的行:
- Letters列与Value列的值完全相等
- 该匹配值属于指定列表
first_2 = ['AB','DA']
原代码问题分析
原代码的筛选逻辑完全偏离需求:
df1 = df[(~df['Letters'].str[0:1].isin(first_2)) & (df['Value'].isin(first_2))]
df['Letters'].str[0:1]取的是Letters列每个值的第一个字符(比如'AB'取成'A'),和需求里的完整值匹配无关~符号是取反操作,逻辑上和需要的条件相反
正确实现代码
直接组合两个核心条件即可:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Letters':('AB','BD','AB','DA','EG','FA'), 'Value':('AB','BC','DA','DA','EH','FA'), 'Position':(1,np.nan,3,4,np.nan,6), }) first_2 = ['AB','DA'] # 正确筛选代码 df_filtered = df[(df['Letters'] == df['Value']) & (df['Letters'].isin(first_2))] print(df_filtered)
输出结果
Letters Value Position 0 AB AB 1.0 3 DA DA 4.0
补充说明
因为要求Letters和Value完全相等,所以也可以用df['Value'].isin(first_2)替代df['Letters'].isin(first_2),结果完全一致。
内容的提问来源于stack exchange,提问作者tonydanza123
相关产品推荐
相关产品推荐

