【发布时间】:2018-11-22 13:27:10
【问题描述】:
我有这个 Python Pandas DataFrame DF:
DICT = { 'letter': ['A','B','C','A','B','C','A','B','C'],
'number': [1,1,1,2,2,2,3,3,3],
'word' : ['one','two','three','three','two','one','two','one','three']}
DF = pd.DataFrame(DICT)
看起来像:
letter number word
0 A 1 one
1 B 1 two
2 C 1 three
3 A 2 three
4 B 2 two
5 C 2 one
6 A 3 two
7 B 3 one
8 C 3 three
我想提取线条
letter number word
A 1 one
B 2 two
C 3 three
首先我累了:
DF[(DF['letter'].isin(("A","B","C"))) &
DF['number'].isin((1,2,3)) &
DF['word'].isin(('one','two','three'))]
当然没用,都选好了
然后我测试了:
Bool = DF[['letter','number','word']].isin(("A",1,"one"))
DF[np.all(Bool,axis=1)]
很好,它有效!但仅适用于一条线...
如果我们采取下一步并给.isin()一个迭代:
Bool = DF[['letter','number','word']].isin((("A",1,"one"),
("B",2,"two"),
("C",3,"three")))
然后就失败了,布尔数组全是False……
我做错了什么?有没有更优雅的方法来根据几列进行此选择?
(无论如何,我想避免 for 循环,因为我使用的真实 DataFrame 非常大,所以我正在寻找最快的最佳方式来完成这项工作)
【问题讨论】:
标签: python pandas dataframe multiple-columns selection