gpt4 book ai didi

python - Pandas 根据 bool 条件选择行和列

转载 作者:行者123 更新时间:2023-11-28 20:02:05 27 4
gpt4 key购买 nike

我有一个包含大约 50 列和 >100 行的 pandas 数据框。我想选择列 'col_x' , 'col_y'其中 'col_z' < m .有没有一种简单的方法可以做到这一点,类似于 df[df['col3'] < m]df[['colx','coly']]但合并?

最佳答案

让我们分解您的问题。你想要

  1. 根据一些 bool 条件过滤行
  2. 您想从结果中选择列的子集。

对于第一点,你需要的条件是——

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

要选择索引 accol_x,您将使用 -

df.loc[['a', 'c'], ['col_x']]

col_x
a 1
c 3

或者,通过 bool 条件进行选择(使用 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

延伸阅读

关于python - Pandas 根据 bool 条件选择行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48035493/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com