我有这个Python Pandas数据帧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)
看起来像:
^{pr2}$我想提取这些线条
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)]
很好,很管用!但只有一条线。。。
如果我们采取下一步并将iterable赋给.isin()
:
Bool = DF[['letter','number','word']].isin((("A",1,"one"),
("B",2,"two"),
("C",3,"three")))
然后失败了,布尔数组充满了错误。。。在
我做错什么了?有没有一种更优雅的方法来根据几个列进行选择?在
(无论如何,我想避免for
循环,因为我使用的实际数据帧非常大,所以我在寻找最快的最佳方式来完成这项工作)
想法是用所有三重值创建新的
DataFrame
,然后用原始的DataFrame
创建{a1}:另一种方法是创建元组列表,转换为} 进行比较:
^{pr2}$Series
,然后按^{相关问题 更多 >
编程相关推荐