我想过滤掉一个数据帧。试图使用标准的布尔(多个)表达式,但它不起作用。我的代码是:
import pandas as pd
import numpy as np
# Setting a dataframe
dates = pd.date_range('1/1/2000', periods=10)
df1 = pd.DataFrame(np.random.randn(10, 4), index=dates, columns=['A', 'B', 'C', 'D'])
# Filtering
df1 = df1.loc[lambda df: -0.5 < df1.A < 0 and 0 <= df1.B <= 1, :]
有什么想法吗?
答案 0 :(得分:2)
不需要匿名lambda函数。只需使用布尔语句进行过滤。另外,请注意使用按位运算符&
,而不是布尔运算符and
。以下是过滤的等效变体:
df1 = df1.query('(A > -0.5) & (A < 0) & (B >= 0) & (B <= 1)', engine='python'))
df1 = df1.loc[(df1.A > -0.5) & (df1.A < 0) & (df1.B >= 0) & (df1.B <= 1)]
df1 = df1[(df1.A > -0.5) & (df1.A < 0) & (df1.B >= 0) & (df1.B <= 1)]
甚至考虑使用pandas.Series.between:
df1 = df1.loc[(df1.A.between(-0.5, 0, inclusive=False) & (df1.B.between(0, 1))]