python - 如果值列表出现在 Pandas 数据框的任何列中,如何打印行

标签 python pandas dataframe series

如果值出现在 pandas dataframe 的任何列中,如何打印行

我想打印数据框的所有行,在其中我从任何列的值列表中找到一些值。数据框遵循以下结构:

1476 13/03/2013  4 10 26 37 47 57
1475 09/03/2013 12 13 37 44 48 51
1474 06/03/2013  1  2  3 11 28 43
1473 02/03/2013  2 12 33 57 58 60
1472 27/02/2013 12 18 23 25 45 50
1471 23/02/2013 10 25 33 36 40 58
1470 20/02/2013  2 34 36 38 51 55
1469 16/02/2013  4 13 35 54 56 58
1468 13/02/2013  1  2 10 19 20 37
1467 09/02/2013 23 24 26 41 52 53
1466 06/02/2013  4  6 13 34 37 51
1465 02/02/2013  6 11 16 26 44 53
1464 30/01/2013  2 24 32 50 54 59
1463 26/01/2013 13 22 28 29 40 48
1462 23/01/2013  5  9 25 27 38 40
1461 19/01/2013 31 36 44 47 49 54
1460 16/01/2013  4 14 27 38 50 52
1459 12/01/2013  2  6 30 34 35 52
1458 09/01/2013  2  4 16 33 44 51
1457 05/01/2013 15 16 34 42 46 59
1456 02/01/2013  6  8 14 26 36 40
1455 31/12/2012 14 32 33 36 41 52
1454 22/12/2012  4 27 29 41 48 52
1453 20/12/2012  6 13 25 32 47 57

首先:我有一系列大小为 3 的值,它们来自 6 个不同值的组合。

第二:我有一个包含 2143 行的数据框。我想检查在这些行中的任何一行中,我是否在列中以任何顺序排列了这三个值。

from itertools import combinations, groupby
from pandas import Series
from operator import itemgetter

inputlist = [2,12,35,51,57,58]
combined = combinations(inputlist, 3)

series = Series(list(g) for k, g in groupby(combined, key=itemgetter(0)))

给我这个:

0    [(2, 12, 35), (2, 12, 51), (2, 12, 57), (2, 12...
1    [(12, 35, 51), (12, 35, 57), (12, 35, 58), (12...
2           [(35, 51, 57), (35, 51, 58), (35, 57, 58)]
3                                       [(51, 57, 58)]

我刚刚尝试了查询命令,这就是我得到的:

df_ordered.query('_1 == 2 & _2 == 12')

ID      DATE        _1  _2  _3  _4  _5  _6

405     2002-10-19  2   12  32  38  47  48
615     2004-11-17  2   12  16  24  26  54
732     2006-01-28  2   12  26  31  43  46
1361    2012-02-11  2   12  19  22  36  58
1472    2013-03-02  2   12  33  57  58  60
1523    2013-08-24  2   12  40  46  52  53
1711    2015-06-10  2   12  19  29  50  59
2142    2019-04-17  2   12  35  51  57  58 

现在,我想展开同样的事情,但我想查看所有这些列并找到这些值中的任何一个。

我也不知道如何将这些系列插入循环以在查询语句中查找值。

编辑:我尝试了 isin 命令,但我不知道如何将它扩展到我拥有的 6 列。

df[df._1.isin(combined)]

最佳答案

IIUC,您可以尝试使用 set.issuperset 创建一个带有列表理解的 boolean mask , numpy.reshapenumpy.any :

import numpy as np
from itertools import combinations

inputlist = [2,12,35,51,57,58]
combined = np.array(list(combinations(inputlist, 3)))

mask = (np.array([set(row).issuperset(c) for row in df.values for c in combined])
        .reshape(len(df), -1).any(1))

print(df[mask])

[输出]

     ID        DATE  _1  _2  _3  _4  _5  _6
3  1473  02/03/2013   2  12  33  57  58  60

关于python - 如果值列表出现在 Pandas 数据框的任何列中,如何打印行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55777300/

相关文章:

Python 命名空间混淆

python - django和symfony2的相似度有多少

python - 如果 Pandas 中字符串的开头和结尾可用,如何有效删除字符?

R基于ifelse的dafaframe的所有组合

python - 如何检查Python数据帧列中的第一个字符是否是数字

python - 避免大型 Pandas DataFrame 上 GroupBy 的内存问题

如果另一列包含特定字符串,Python Pandas 如何更新列

python - 在 Pandas 中使用模式过滤和填充 Nan

R - 根据模式和条件删除字符串列中的子字符串

python - 类型错误 : create_user() got multiple values for keyword argument 'name'