Python 熊猫数据帧-选择和索引

Python 熊猫数据帧-选择和索引,python,pandas,dataframe,data-science,Python,Pandas,Dataframe,Data Science,我有这个数据框对象 df = pd.DataFrame(randn(5,4),['A','B','C','D','E'],['W','X','Y','Z']) 我执行,这是由行A、B、C、D、E和W、X、Y、Z列组成的表 这些W,X,Y,Z列中的每一列实际上都是熊猫系列,W是熊猫系列,X和Y和Z,它们都共享一个共同的索引 这基本上是一个数据帧,一个共享索引的系列集 在这里之前没关系。:) 我可以这样抓取W列大于0的所有数据值: 请注意,C行将消失 但我不明白以下几点: 这句话的意思是什么

我有这个数据框对象

df = pd.DataFrame(randn(5,4),['A','B','C','D','E'],['W','X','Y','Z'])
我执行,这是由行
A、B、C、D、E
W、X、Y、Z
列组成的表

这些
W,X,Y,Z
列中的每一列实际上都是熊猫系列,
W
是熊猫系列,
X
Y
Z
,它们都共享一个共同的索引

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

在这里之前没关系。:)

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

请注意,C行将消失

但我不明白以下几点:

这句话的意思是什么

df[df['W']>0][['Y','X']]
结果是:

理论上,我将获取所有大于0的数据帧
W
列值,然后根据什么标准或条件返回
Y
X

为什么我在
Y
X
列中获取这些值

目前,我正在研究大熊猫,我想知道这种行为的原因

当你这样做的时候

df[df['W']>0]
返回一个新的
数据帧
。因此,当您将
[['Y',X']]
放在这个数据帧的末尾时,您基本上在这个新的数据帧中做了一个简单的选择。列
X
Y
中显示的值只是此df的
X
Y
的值


更详细地说,
df['W']>0
将返回一个
Boolean
序列,即值为
True
False
的序列。当您执行
df[df['W']>0]
时,您正在使用此系列过滤您的
df
。输出将是
df
的行,其中
df['W']>0
返回
True
,如前两步所述:

  • 返回Y、X列
  • 返回W>0的行
  • 第三步:返回W>0的行,然后选择Y、X列
  • 基本上,我们首先将函数1应用于数据帧,然后应用于输出函数2。因此是最终输出


    它是函数的顺序执行。

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

  • (筛选行)
    df[df['W']>0]
    仅选择W列为正的行
  • (筛选列)
    df[['X','Y']]
    仅选择两个感兴趣的列
  • df['W']>0
    返回一个布尔序列,其中列大于零(
    true
    ),否则为false


  • df[df['W']>0]
    返回
    df
    中的所有行,其中
    df['W']>0
    true

  • df['X']
    返回数据帧的“X”列

  • 类似地,
    df[['X','Y']]
    从数据帧返回列
    X
    &
    Y

  • 如您所见,语法
    df[…]
    可能具有不同的含义:

  • 通过传递一个与数据帧长度相同的布尔序列,可以使用它逐行屏蔽数据帧
  • 它可用于选择单个列(在字符串中传递)或一组列(在字符串列表中传递)

  • 如果将此Python代码与示例excel进行比较,则可以说明:

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

    df[df['W']>0][['Y','X']]当W大于0时,获取Y和X的列
    df[df['W']>0]
    在应用过滤条件后返回一个数据帧。然后
    [“Y”,“X”]
    访问该数据帧的列
    Y
    X
    。进行此选择的“正确”或惯用方法是使用.loc,
    df.loc[df['W']>0,['Y','X']]
    @ScottBoston using.loc在执行选择操作时与性能或内存有一些关系吗?@bgarcial通常,您应该重新定义链接选择。要查找链接,请查找']['。
    df[df['W']>0]
    
    df[df['W']>0][['Y','X']]
    
    IF(W>0,"Value if True(return Y and X)", "Value if False ("")")