使用Pandas根据多个列对数据帧中的数据进行子集化?

时间:2016-03-17 19:38:33

标签: python-2.7

我是python的新手。我必须根据对应于该数据帧中2列的2个列表从pandas数据帧中提取子集。列表中的值都应与索引级别的数据帧的值匹配。我尝试过“isin”功能,但很明显它不适用于组合。

from pandas import *

d = {'A' : ['a', 'a', 'c', 'a','b'] ,'B' : [1, 2, 1, 4,1]}

df = DataFrame(d)
list1 = ['a','b']
list2 = [1,2]

print df

   A  B
0  a  1
1  a  2
2  c  1
3  a  4
4  b  1

### Using isin function
df[(df.A.isin(list1)) & (df.B.isin(list2)) ]
   A  B
0  a  1
1  a  2
4  b  1

###Desired outcome
d2 = {'A' : ['a'], 'B':[1]}
DataFrame(d2)

   A  B
0  a  1

请告诉我是否可以在不使用循环的情况下完成此操作,如果有办法可以一步完成。

1 个答案:

答案 0 :(得分:1)

快速而肮脏的方法是使用zip

df['C'] = zip(df['A'], df['B'])
list3 = zip(list1, list2)

d2 = df[df['C'].isin(list3)

print(df2)
   A  B       C
0  a  1  (a, 1)

您可以在对其进行过滤后删除新创建的列。