我有一个Pandas数据框,其中包含约50列和100多行。我想选择列'col_x'
、'col_y'
,其中'col_z' < m
。是否有一种简单的方法来完成这个操作,类似于df[df['col3'] < m][['colx','coly']]
?
我有一个Pandas数据框,其中包含约50列和100多行。我想选择列'col_x'
、'col_y'
,其中'col_z' < m
。是否有一种简单的方法来完成这个操作,类似于df[df['col3'] < m][['colx','coly']]
?
让我们来解决你的问题。你想要:
对于第一个问题,你需要的条件是 -
df["col_z"] < m
对于第二个需求,您需要指定所需的列列表 -
["col_x", "col_y"]
如何使用pandas将这两个内容结合起来以产生预期输出?最直接的方法是使用loc
函数 -
df.loc[df["col_z"] < m, ["col_x", "col_y"]]
第一个参数选择行,第二个参数选择列。
关于 loc
的更多信息
以关系代数操作 - 选择 和 投影的术语来看待这个问题。如果你来自 SQL 世界,这将是一个可比较的等价物。在 SQL 语法中,上述操作看起来像这样 -
SELECT col_x, col_y # projection on columns
FROM df
WHERE col_z < m # selection on rows
pandas
的 loc
方法允许您指定索引标签以选择行。例如,如果您有一个数据帧 -
col_x col_y
a 1 4
b 2 5
c 3 6
要选择索引a
、c
和col_x
,您可以使用-
df.loc[['a', 'c'], ['col_x']]
col_x
a 1
c 3
或者,如果要根据布尔条件进行选择(使用一系列/数组的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
进行比较,如果不是则返回 True
(所有的奇数都是这样被选中的)。以下是表达式的结果 -
(df.col_x % 2).ne(0)
a True
b False
c True
Name: col_x, dtype: bool
延伸阅读