如何使用lis中的项在数据帧中进行“and”操作

2024-04-20 14:19:09 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有列名称、相等关系和条件的列表

column = ['height', 'age', 'gender']
equal = ['>', '>', '==']
condition = [1.68, 20, 'F']

我想选择数据框中有特定条件的数据

df = df[(df['height']>1.68) & df['age']>20 & df['gender']=='F']

是否可以使用上面的三个列表(列、相等和条件)来实现选择?你知道吗


Tags: 数据名称df列表age关系columnequal
1条回答
网友
1楼 · 发布于 2024-04-20 14:19:09

我认为需要^{}作为构建条件,但是需要if-else条件来添加""作为values中的字符串值:

df = pd.DataFrame({'gender':list('MMMFFF'),
                   'height':[4,5,4,5,5,4],
                   'age':[70,80,90,40,2,3]})

print (df)
  gender  height  age
0      M       4   70
1      M       5   80
2      M       4   90
3      F       5   40
4      F       5    2
5      F       4    3

q = ' & '.join(['{}{}"{}"'.format(i,j,k) if isinstance(k, str) 
               else '{}{}{}'.format(i,j,k) for i, j, k in zip(column, equal, condition)])
print (q)
height>1.68 & age>20 & gender=="F"

感谢@Yakym Pirozhenko提供更简单的解决方案:

q = ' & '.join(['{}{}{}'.format(i,j,repr(k)) for i, j, k in zip(column, equal, condition)])
print (q)
height>1.68 & age>20 & gender=='F' 

df = df.query(q)
print (df)
  gender  height  age
3      F       5   40

相关问题 更多 >