Pandas select 行和列基于布尔条件
Pandas select rows and columns based on boolean condition
我有一个 pandas 数据框,其中包含大约 50 列和 >100 行。我想要 select 列 'col_x'
,'col_y'
其中 'col_z' < m
。有没有一种简单的方法可以做到这一点,类似于 df[df['col3'] < m]
和 df[['colx','coly']]
但结合起来?
让我们分解你的问题。你想
- 根据某些布尔条件过滤行
- 您想 select 结果中的列子集。
对于第一点,你需要的条件是-
df["col_z"] < m
对于第二个要求,您需要指定所需的列列表 -
["col_x", "col_y"]
您如何将这两者结合起来以产生具有 pandas 的预期输出?最直接的方法是使用 loc
-
df.loc[df["col_z"] < m, ["col_x", "col_y"]]
第一个参数 select 行,第二个参数 select 列。
更多关于loc
从关系代数运算的角度考虑这一点 - selection 和 projection。如果您来自 SQL 世界,这将是一个相关的等价物。上面的操作,在 SQL 语法中,看起来像这样 -
SELECT col_x, col_y # projection on columns
FROM df
WHERE col_z < m # selection on rows
pandas
loc 允许您为 selecting 行指定索引标签。例如,如果您有一个数据框 -
col_x col_y
a 1 4
b 2 5
c 3 6
要 select 索引 a
、c
和 col_x
你会使用 -
df.loc[['a', 'c'], ['col_x']]
col_x
a 1
c 3
或者,对于 select 布尔条件(使用 series/array 的 bool
值,如您的原始问题所问),其中 col_x
中的所有值很奇怪 -
df.loc[(df.col_x % 2).ne(0), ['col_y']]
col_y
a 4
c 6
有关详细信息,df.col_x % 2
计算每个值相对于 2
的模数。然后 ne(0)
会将值与 0
进行比较,如果不是 return True
(所有奇数都像这样 selected)。这是该表达式的结果 -
(df.col_x % 2).ne(0)
a True
b False
c True
Name: col_x, dtype: bool
进一步阅读
我有一个 pandas 数据框,其中包含大约 50 列和 >100 行。我想要 select 列 'col_x'
,'col_y'
其中 'col_z' < m
。有没有一种简单的方法可以做到这一点,类似于 df[df['col3'] < m]
和 df[['colx','coly']]
但结合起来?
让我们分解你的问题。你想
- 根据某些布尔条件过滤行
- 您想 select 结果中的列子集。
对于第一点,你需要的条件是-
df["col_z"] < m
对于第二个要求,您需要指定所需的列列表 -
["col_x", "col_y"]
您如何将这两者结合起来以产生具有 pandas 的预期输出?最直接的方法是使用 loc
-
df.loc[df["col_z"] < m, ["col_x", "col_y"]]
第一个参数 select 行,第二个参数 select 列。
更多关于loc
从关系代数运算的角度考虑这一点 - selection 和 projection。如果您来自 SQL 世界,这将是一个相关的等价物。上面的操作,在 SQL 语法中,看起来像这样 -
SELECT col_x, col_y # projection on columns
FROM df
WHERE col_z < m # selection on rows
pandas
loc 允许您为 selecting 行指定索引标签。例如,如果您有一个数据框 -
col_x col_y
a 1 4
b 2 5
c 3 6
要 select 索引 a
、c
和 col_x
你会使用 -
df.loc[['a', 'c'], ['col_x']]
col_x
a 1
c 3
或者,对于 select 布尔条件(使用 series/array 的 bool
值,如您的原始问题所问),其中 col_x
中的所有值很奇怪 -
df.loc[(df.col_x % 2).ne(0), ['col_y']]
col_y
a 4
c 6
有关详细信息,df.col_x % 2
计算每个值相对于 2
的模数。然后 ne(0)
会将值与 0
进行比较,如果不是 return True
(所有奇数都像这样 selected)。这是该表达式的结果 -
(df.col_x % 2).ne(0)
a True
b False
c True
Name: col_x, dtype: bool
进一步阅读