Longpandas逻辑运算

Long pandas logic operation

这么长的pandas逻辑运算有没有更好的写法?我在下面只列出了几个例子,但实际上有更多的检查。这样可以完成工作,但我觉得可能有更简洁的方式来表达此操作。如果您对这些数据感到好奇,请 NYC taxi data 欢迎任何建议。

mask = (df.Fare_amount >= 2.5) & \
       (df.Total_amount >= 2.5) & \
       (df.Tip_amount >= 0) & \
       (df.Tolls_amount >= 0) & \
       (df.Extra >= 0) & \
       (df.Trip_distance > 0) & \
       (df.Passenger_count.between(1, 5))

# I actually have some more checks here like these above....

new_df = df[mask].copy()

不确定是否有更好的方法,但一种选择是将具有相同条件的列组合在一起,并在行上使用 all 以减少使用的 & 操作数:

mask = (df[['Fare_amount', 'Total_amount']] >= 2.5).all(1) & \
       (df[['Tip_amount', 'Tolls_amount', 'Extra']] >= 0).all(1) & \
       (df.Trip_distance > 0) & \
       (df.Passenger_count.between(1, 5))

其实我更喜欢上面Psidom给出的答案,因为我觉得这个不是特别"Pythonic"。但我想我会提到它,因为它是一种替代方法,偶尔会有用。

DataFrames 支持 query 方法,您可以向该方法传递表示查询的字符串。这可以节省一些击键次数,但如果您的过滤条件经常更改,这不是最灵活的方法:

df.query("Fare_amount >= 2.5 & Total_amount >= 2.5 & "
         "Tip_amount >= 0 & Tolls_amount >= 0 & Extra >= 0 & Trip_distance >= 0 & "
         "1 <= Passenger_count <= 5")