我是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
请告诉我是否可以在不使用循环的情况下完成此操作,如果有办法可以一步完成。
答案 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)
您可以在对其进行过滤后删除新创建的列。