Use a list of values to select rows from a pandas dataframe
假设我有以下熊猫数据框:
1 2 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 |
我可以基于特定值进行子集:
1 2 3 4 5
| x = df[df['A'] == 3]
x
A B
2 3 3 |
但是,如何根据值列表进行子集呢?-像这样:
1 2 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"筛选熊猫数据帧行的副本?,将响应转换为示例给出:
1 2 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]})。正如您所拥有的,您的代码不起作用。