按值访问另一列,Pandas

Hyp*_*nja 1 python indexing label python-2.7 pandas

我有一个数据框如下:

    Type      Name           Category              
    Bird      Flappy Bird    Air      
    Bird      Pigeon         Air    
    Pokemon   Jerry          Aquatic      
    Pokemon   Mudkip         Aquatic
    Animal    Lion           Terrestrial
    Bird      Pigeon         Air2  
Run Code Online (Sandbox Code Playgroud)

对于给定的名称,比如 say "Pigeon",我需要访问类别 Column 中的相应值,即它应该给我字符串"Air"
我有 2 个值,Pigeon但我需要返回“空气”进行第二次观察。

请注意,我根本没有使用索引,因此无法进行第二次观察iloc。我需要在另一列中按访问它。

或类似的东西获得指数“鸽子”,并使用获得相应的列值就行了。

EdC*_*ica 7

loc

所以你的例子:

df.loc[df.Name == 'Pigeon', 'Category'] 
Run Code Online (Sandbox Code Playgroud)

会给你你想要的

例子:

In [17]:

import io
import pandas as pd
temp = """Type      Name           Category              
Bird      Flappy_Bird    Air      
Bird      Pigeon         Air    
Pokemon   Jerry          Aquatic      
Pokemon   Mudkip         Aquatic
Animal    Lion           Terrestrial"""

df = pd.read_csv(io.StringIO(temp), sep='\s+')
df
Out[17]:
      Type         Name     Category
0     Bird  Flappy_Bird          Air
1     Bird       Pigeon          Air
2  Pokemon        Jerry      Aquatic
3  Pokemon       Mudkip      Aquatic
4   Animal         Lion  Terrestrial

[5 rows x 3 columns]
In [19]:

df.loc[df.Name == 'Pigeon','Category']
Out[19]:
1    Air
Name: Category, dtype: object
Run Code Online (Sandbox Code Playgroud)

如果您有多个值并且只想要第一个,请使用idxmin

In [24]:

df.ix[(df.Name == 'Pigeon').idxmin(),'Category']
Out[24]:
'Air'
Run Code Online (Sandbox Code Playgroud)

编辑

因此,对于我们有多个值并且您想要访问单个值的情况,您可以检查索引值并直接访问它们:

在 [23] 中:

df.loc[df.Name=='Pigeon','Category'].index.values
Out[23]:
array([1, 5], dtype=int64)
In [26]:

df.loc[df.Name=='Pigeon','Category'][5]
Out[26]:
'Air2'
Run Code Online (Sandbox Code Playgroud)

或者,如果你想遍历它们,那么 series 有一个iteritems()方法:

In [28]:

df.loc[df.Name=='Pigeon','Category'].iteritems()
Out[28]:
[(1, 'Air'), (5, 'Air2')]
Run Code Online (Sandbox Code Playgroud)

其中任何一个都应该满足您的要求