在python中过滤与列表值匹配的列值的数据框[重复]

Posted

技术标签:

【中文标题】在python中过滤与列表值匹配的列值的数据框[重复]【英文标题】:Filter dataframe matching column values with list values in python [duplicate] 【发布时间】:2019-04-04 12:57:59 【问题描述】:

我有一个DataFrame,如下所示:

import numpy as np
import pandas as pd
import string
import random

random.seed(42)

df = pd.DataFrame('col1': list(string.ascii_lowercase)[:11],
                   'col2':[random.randint(1,100) for x in range(11)])

df

   col1 col2
0   a   64
1   b   3
2   c   28
3   d   23
4   e   74
5   f   68
6   g   90
7   h   9
8   i   43
9   j   3
10  k   22

我正在尝试根据过滤与值列表匹配的前一个数据帧的行来创建一个新的数据帧。我已经尝试了下一段代码:

df_filt = df[df['col1'] in ['a','c','h']]

但是我得到一个错误。我期待下一个结果:

df_filt

   col1 col2
0   a   64
1   c   28
2   h   9

我正在寻找一种灵活的解决方案,该解决方案允许基于匹配列表中比示例中提供的元素更多的元素进行过滤。

【问题讨论】:

使用isin解决这个问题,df['col1'].isin(['a','c','h']) 【参考方案1】:

您可以使用pandas.Series.isin 进行复合“输入”检查。

输入数据框:

>>> df
>>> 
   col1  col2
0     a    64
1     b     3
2     c    28
3     d    23
4     e    74
5     f    68
6     g    90
7     h     9
8     i    43
9     j     3
10    k    22

输出数据框:

>>> df[df['col1'].isin(['a', 'c', 'h'])]
>>> 
  col1  col2
0    a    64
2    c    28
7    h     9

【讨论】:

【参考方案2】:

使用isin

df_filt = df[df.col1.isin(['a','c','h'])]

【讨论】:

以上是关于在python中过滤与列表值匹配的列值的数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章

按 R 中的列值过滤列表中的每个数据框

如果数据框列值匹配字典键,检查不同的列是不是匹配字典值

重命名python DataFrame的列值的子字符串

根据火花数据框scala中的列值过滤行

Python、Pandas 和 for 循环:根据与列表值的匹配填充数据框行

如何过滤具有列表的列的数据框包含值[重复]