代码之家  ›  专栏  ›  技术社区  ›  DeltaIV

使用布尔选择选择数据帧,然后提取与某列对应的值

  •  1
  • DeltaIV  · 技术社区  · 6 年前

    数据帧示例:

    import pandas as pd
    df = pd.DataFrame({'a': [-3, -2, 0], 'b': [-2, 2, 5], 'c': [-1, 0, 7], 'd': [1, 4, 8]})
    

    我正试图做一些我认为相当简单的事情,这在其他支持dataframe类的语言中确实是即时的,比如r。 df ,唯一需要注意的是,我选择的行使用布尔表达式(例如,`“a”==0),而不是使用标签。与往常一样,列是按标签选择的。例如,这是可行的,但似乎是不必要的浪费:

    df["c"][df["a"]==0][1] 
    

    此指令不是直接从数据帧中提取值,而是1)提取熊猫系列,2)选择系列中的行,3)选择行选择返回的数组的第二个元素!(第一个元素是索引)。它不仅看起来不必要地复杂,而且我担心对于非常大的数据帧来说,它也可能很慢。

    我尝试了其他解决方案 .at .iat 但似乎什么都没用。难道没有更简单/更聪明的方法来做这件事吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Andy Hayden    6 年前

    你不能一下子做到这一点:

    In [11]: df.loc[df["a"]==0, "c"]
    Out[11]:
    2    7
    Name: c, dtype: int64
    
    In [12]: df.loc[df["a"]==0, "c"].iat[0]
    Out[12]: 7
    
        2
  •  1
  •   BENY    6 年前

    使用 nonzero 具有 iat

    df.iat[(df.a==0).nonzero()[0][0],2]
    Out[114]: 7