Use a list of values to select rows from a pandas dataframe 
假设我有以下熊猫数据框:
| 12
 3
 4
 5
 6
 7
 8
 
 | df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3, 5]})df
 
 A   B
 0    5   1
 1    6   2
 2    3   3
 3    4   5
 | 
我可以基于特定值进行子集:
| 12
 3
 4
 5
 
 | x = df[df['A'] == 3]x
 
 A   B
 2    3   3
 | 
但是,如何根据值列表进行子集呢?-像这样:
| 12
 3
 
 | list_of_values = [3,6]
 y = df[df['A'] in list_of_values]
 | 
		
		
- 在重复这是真的吗?there is to get the子集的方式没有using the?
- 是的,是的。它是真的在复制。安identical复本。
- see this also one for滤波基于答案或更多的列。
 
	 
这确实是如何按"within"/"in"筛选熊猫数据帧行的副本?,将响应转换为示例给出:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | In [5]: df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3, 5]})
 In [6]: df
 Out[6]:
 A  B
 0  5  1
 1  6  2
 2  3  3
 3  4  5
 
 In [7]: df[df['A'].isin([3, 6])]
 Out[7]:
 A  B
 1  6  2
 2  3  3
 | 
		
		
- 您将如何按列表的顺序返回这些值?例如,list_of_values的值是3,然后是6,但帧的返回值是6,然后是3。我说的不是简单的排序,而是如何具体地按照列表中的值的顺序返回。
- 这是一个布尔索引的例子,它使索引中的顺序保持不变,有关详细信息,请参阅pandas.pydata.org/pandas docs/stable/…。需要对所选内容进行排序。
- 这帮助我stackoverflow.com/a/29108799/5629831
- 有没有一个简单的方法来实现'pd.series.str.notin(list)'?
- @韩正祖-这个问题对你有帮助。
- 我们如何为更大的数据优化它?我的df有2米的行,list_of_values有3公里的元素。
- df[~df['a'].isin([3,6])]表示不在列表中
- 您也可以通过使用'query'和@<您的值列表>:例如:df=pd.dataframe('a':[1,2,3],'b':['a','b','f'])df=pd.dataframe('a':[5,6,3,4],'b':[1,2,3,5])list _of values=[3,6]result=df.query("a in@list values")结果a b 1 6 2 3
- @我在这里回答了你的问题:stackoverflow.com/questions/51944021/&hellip;
- 如果您想从这两列中进行筛选,也可以这样做:df[(~df['a'].isin([5]))&;(~df['b'].isin([5])]
- @不好意思,我建议您稍微修改一下您的答案,将pd包含在数据框前面,比如:df = pd.DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3, 5]})。正如您所拥有的,您的代码不起作用。