以下代码仅用于示例目的:
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'year': [2012, 2012, 2013, 2014, 2014],
'reports': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
df = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
value_list = ['Tina', 'Molly', 'Jason']
df[df.name.isin(value_list)]
这里,可以看到已经传递了一个列表(即value_list)。如果我不想传递一个列表并且只想传递一个整数(即报告列中的24来找到它的相应行),那么理想的方法是什么。我试图这样做,但实际上并没有起作用:
df[df.reports.isin(24)]
错误来自:只允许类似列表的对象传递给isin(),你传递了一个[int]。
另外,我如何才能找到相应的名称'反对报告24(即莫莉)
答案 0 :(得分:2)
只需使用布尔索引:
>>> df
name reports year
Cochice Jason 4 2012
Pima Molly 24 2012
Santa Cruz Tina 31 2013
Maricopa Jake 2 2014
Yuma Amy 3 2014
>>> df[df.reports == 24]
name reports year
Pima Molly 24 2012
你可以使用.isin
单个元素列表:
>>> df[df.reports.isin([24])]
name reports year
Pima Molly 24 2012
但布尔索引选项是您通常会看到的。
如果您有一个大数据框(超过10,000行,让我们说)和更复杂的布尔表达式,您可以使用df.query
有效地执行此操作:
>>> df.query("reports==24 or name == 'Jason'")
name reports year
Cochice Jason 4 2012
Pima Molly 24 2012
如果你有numexpr
引擎,这将是快速且节省内存的。