Pandas DataFrame - 选择和索引

Pandas DataFrame - Selecting and Indexing

我有这个数据框pandas对象

df = pd.DataFrame(randn(5,4),['A','B','C','D','E'],['W','X','Y','Z'])

我执行,这是 table 行 A, B, C, D, EW, X, Y, Z

这些 W, X, Y, Z 列中的每一列实际上都是一个 Pandas 系列,W 是一个 Pandas 系列,XYZ,它们共享一个公共索引。

这基本上就是一个数据框,一个共享索引的系列集。

到这里没关系。 :)

我可以这样抓取W列所有大于0的数据值:

注意 C 行消失了

但我不明白以下内容:

这句话的意思是什么?

df[df['W']>0][['Y','X']]

结果是这样的:

理论上,我正在抓取所有大于 0 的数据框 W 列值,我领先 return 基于 YX 列以什么标准或条件?

为什么我在 YX 列上获取这些值的原因是什么?

目前,我正在学习Pandas,我想知道这种行为的原因。

当你

df[df['W']>0]

return编辑了一个新的 data frame。因此,当您将 [['Y', 'X']] 放在此数据框的末尾时,您基本上是在这个新数据框中进行简单的选择。将出现在列 XY 中的值只是此 df 的 XY 的值。

更详细地说,df['W']>0 将 return 一个 Boolean 系列,即具有值 TrueFalse 的系列。当您执行 df[df['W']>0] 时,您正在使用此系列过滤 df。输出将是 df 的行,其中 df['W']>0 returns True.

正如您在第一个和第二个步骤中所解释的那样:

  1. Returns Y、X 列
df[['Y','X']]
  1. Returns 行,其中 W > 0
df[df['W']>0]
  1. 第三步:Returns 行,其中 W > 0 然后我们 select Y,X 列
df[df['W']>0][['Y','X']]

基本上首先我们将函数 1 应用于数据框,然后在输出上应用函数 2。因此最终输出。

它是函数的顺序执行。

它在一个线程中执行两个独立的操作。

  1. (过滤行)df[df['W'] > 0]只选择W列为正数的行
  2. (过滤列)df[['X', 'Y']]只选择感兴趣的2列
  1. df['W']>0 returns 列大于零的布尔序列 (true) else false

  2. df[df['W']>0] returns 来自 df 的所有行,其中 df['W']>0true

  3. df['X'] returns 数据帧的列 'X'

  4. 类似地,df[['X', 'Y']] returns 来自数据帧的列 X & Y

如您所见,语法 df[...] 可以有不同的含义:

  1. 它可以用于通过传递一个与数据框长度相同的布尔序列来按行屏蔽数据框
  2. 可用于select单个列(传入字符串)或一组列(传入字符串列表)

如果将此 Python 代码与例如 excel 进行比较,您可以声明:

IF(W>0,"Value if True(return Y and X)", "Value if False ("")")