过滤包含OR在内的多个条件的数据帧



我编写了一个小脚本,循环遍历约束以过滤数据框架。示例和后续解释问题如下。

constraints = [['stand','==','L'],['zone','<','20']]

for x in constraints:
vari = x[2]
df = df.query("{0} {1} @vari".format(x[0],x[1]))
<表类>区站速度类型tbody><<tr>02L83.7CH17L95.9如果214道明>94.9FS311道明>93.3FS413道明>86.9CH57L96.4如果613道明>82.6SL

这似乎已经完成了任务,但可能还有更好的方法。

for x in constraints:
vari = x[2]
if isinstance(vari,list):
frame = frame[frame[x[0]].isin(vari)]
else:          
frame = frame.query("{0} {1} @vari".format(x[0],x[1]))

IIUC(请参阅评论中我的问题)您可以这样做:

做了一点不同的df来显示结果(我猜你显示的表已经被过滤了)

df = pd.DataFrame(
{'zone': {0: 2, 1: 11, 2: 25, 3: 11, 4: 23, 5: 7, 6: 13},
'stand': {0: 'L', 1: 'L', 2: 'L', 3: 'C', 4: 'L', 5: 'K', 6: 'L'},
'speed': {0: 83.7, 1: 95.9, 2: 94.9, 3: 93.3, 4: 86.9, 5: 96.4, 6: 82.6},
'type': {0: 'CH', 1: 'SI', 2: 'FS', 3: 'FS', 4: 'CH', 5: 'SI', 6: 'SL'}})
print(df)

zone    stand   speed   type
0      2        L    83.7     CH
1     11        L    95.9     SI
2     25        L    94.9     FS
3     11        C    93.3     FS
4     23        L    86.9     CH
5      7        K    96.4     SI
6     13        L    82.6     SL

res = df.loc[ ( (df['type']=='SI') | (df['type']=='CH') ) & ( (df['zone']<20) & (df['stand']=='L') ) ]
print(res)

zone    stand   speed   type
0      2        L    83.7     CH
1     11        L    95.9     SI

如果这是你正在寻找的,请告诉我。

最新更新