首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python Pandas:获取列与特定值匹配的行的索引

Python Pandas:获取列与特定值匹配的行的索引
EN

Stack Overflow用户
提问于 2014-02-16 00:18:11
回答 5查看 1.2M关注 0票数 401

给定一个具有列"BoolCol“的DataFrame,我们希望找到其中"BoolCol”的值为真的DataFrame的索引

我目前有一种迭代的方式来做这件事,它工作得很好:

代码语言:javascript
复制
for i in range(100,3000):
    if df.iloc[i]['BoolCol']== True:
         print i,df.iloc[i]['BoolCol']

但这不是熊猫的正确做法。经过一些研究,我目前正在使用以下代码:

代码语言:javascript
复制
df[df['BoolCol'] == True].index.tolist()

这给了我一个索引列表,但它们不匹配,当我通过执行以下操作检查它们时:

代码语言:javascript
复制
df.iloc[i]['BoolCol']

结果实际上是假的!!

哪种方式才是熊猫的正确方式呢?

EN

回答 5

Stack Overflow用户

发布于 2016-12-31 05:53:50

可以使用numpy where()函数来完成:

代码语言:javascript
复制
import pandas as pd
import numpy as np

In [716]: df = pd.DataFrame({"gene_name": ['SLC45A1', 'NECAP2', 'CLIC4', 'ADC', 'AGBL4'] , "BoolCol": [False, True, False, True, True] },
       index=list("abcde"))

In [717]: df
Out[717]: 
  BoolCol gene_name
a   False   SLC45A1
b    True    NECAP2
c   False     CLIC4
d    True       ADC
e    True     AGBL4

In [718]: np.where(df["BoolCol"] == True)
Out[718]: (array([1, 3, 4]),)

In [719]: select_indices = list(np.where(df["BoolCol"] == True)[0])

In [720]: df.iloc[select_indices]
Out[720]: 
  BoolCol gene_name
b    True    NECAP2
d    True       ADC
e    True     AGBL4

虽然你并不总是需要索引来匹配,但是如果你需要:

代码语言:javascript
复制
In [796]: df.iloc[select_indices].index
Out[796]: Index([u'b', u'd', u'e'], dtype='object')

In [797]: df.iloc[select_indices].index.tolist()
Out[797]: ['b', 'd', 'e']
票数 42
EN

Stack Overflow用户

发布于 2020-01-08 19:30:33

如果您只想使用dataframe对象一次,请使用:

代码语言:javascript
复制
df['BoolCol'].loc[lambda x: x==True].index
票数 22
EN

Stack Overflow用户

发布于 2019-06-21 12:56:33

简单的方法是在过滤前重置DataFrame的索引:

代码语言:javascript
复制
df_reset = df.reset_index()
df_reset[df_reset['BoolCol']].index.tolist()

有点老生常谈,但很快!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21800169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档