在多列上过滤熊猫数据框的最快方法

蟑螂领主

我有一个带有多个列的pandas数据框,它们在最后一列中标记了数据,例如,

df = pd.DataFrame( {'1_label' : ['a1','b1','c1','d1'],
                    '2_label' : ['a2','b2','c2','d2'],
                    '3_label' : ['a3','b3','c3','d3'],
                    'data'    : [1,2,3,4]})

df =      1_label 2_label 3_label  data
     0      a1      a2      a3     1
     1      b1      b2      b3     2
     2      c1      c2      c3     3
     3      d1      d2      d3     4

以及元组列表,

list_t = [('a1','a2','a3'), ('d1','d2','d3')]

我想过滤此数据框并返回一个仅包含与列表中元组相对应的行的新数据框。

result =        1_label 2_label 3_label  data
            0      a1      a2      a3     1
            1      d1      d2      d3     4

我的幼稚(和C ++启发)解决方案是使用append(例如vector :: push_back)

for l1, l2, l3 in list_t:
    if df[(df['1_label'] == l1) & 
          (df['2_label'] == l2) & 
          (df['3_label'] == l3)].empty is False:
        result = result.append(df[(df['1_label'] == l1) & 
                              (df['2_label'] == l2) &
                              (df['3_label'] == l3)]

虽然我的解决方案有效,但我怀疑大数据框和大元组列表的速度太慢了,因为我认为熊猫会在每次追加调用时创建一个新的数据框。有人可以建议一种更快/更清洁的方法吗?谢谢!

伊利亚·艾维拉(IljaEverilä)

假设没有重复项,则可以在要“过滤”的列上创建索引:

In [10]: df
Out[10]: 
  1_label 2_label 3_label  data
0      a1      a2      a3     1
1      b1      b2      b3     2
2      c1      c2      c3     3
3      d1      d2      d3     4

In [11]: df.set_index(['1_label', '2_label', '3_label'])\
    .loc[[('a1','a2','a3'), ('d1','d2','d3')]]\
    .reset_index()
Out[11]: 
  1_label 2_label 3_label  data
0      a1      a2      a3     1
1      d1      d2      d3     4

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在多列上筛选熊猫数据框的最快方法

来自分类Dev

如何基于字典过滤多列上的熊猫数据框?

来自分类Dev

如果包含*,则在列上过滤pandas数据框

来自分类Dev

在列表中定义的列上过滤数据框

来自分类Dev

在多列上重塑熊猫数据框

来自分类Dev

遍历熊猫数据框的最快方法?

来自分类Dev

“解压”熊猫数据框的最快方法

来自分类Dev

在Pyspark中的多个列上过滤具有多个条件的Spark数据框

来自分类Dev

Pyspark:如何在MapType列上过滤数据框?(如isin()的样式)

来自分类Dev

在多列上对熊猫数据框行进行排名

来自分类Dev

在不符合条件的所有行上过滤熊猫数据框

来自分类Dev

从熊猫数据框中消除特定日期的最快方法

来自分类Dev

在列上过滤numpy矩阵

来自分类Dev

SQL:在计算列上过滤

来自分类Dev

熊猫数据框过滤

来自分类Dev

根据多列中的值过滤熊猫数据框

来自分类常见问题

如何按多列过滤熊猫数据框

来自分类Dev

根据来自其他熊猫数据框的匹配列更新熊猫列的最快方法

来自分类Dev

pandas 不过滤多列上的数据

来自分类Dev

熊猫:在选定列上联接数据框

来自分类Dev

数据框列上的 Savgol 过滤器

来自分类Dev

在SUM列上过滤SQL组

来自分类Dev

在 MySQL 中的两列上过滤不同

来自分类Dev

在单列上过滤 SELECT 结果

来自分类Dev

过滤数据框的熊猫直方图

来自分类Dev

过滤熊猫中的数据框

来自分类Dev

过滤熊猫数据框聚合

来自分类Dev

过滤熊猫中的数据框

来自分类Dev

熊猫中的数据框过滤