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")
这么长的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")