Pandas DataFrame:在多个列中选择多个元素

2024-04-25 02:17:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个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循环,因为我使用的实际数据帧非常大,所以我在寻找最快的最佳方式来完成这项工作)


Tags: 数据numberdataframepandasdfonedictword
1条回答
网友
1楼 · 发布于 2024-04-25 02:17:42

想法是用所有三重值创建新的DataFrame,然后用原始的DataFrame创建{a1}:

L = [("A",1,"one"),
     ("B",2,"two"),
     ("C",3,"three")]

df1 = pd.DataFrame(L, columns=['letter','number','word'])
print (df1)
  letter  number   word
0      A       1    one
1      B       2    two
2      C       3  three

df = DF.merge(df1)
print (df)
  letter  number   word
0      A       1    one
1      B       2    two
2      C       3  three

另一种方法是创建元组列表,转换为Series,然后按^{}进行比较:

^{pr2}$

相关问题 更多 >