python - 有效地选择与 Pandas DataFrame 中多个值之一匹配的行

标签 python pandas

问题

给定 Pandas DataFrame 中的数据,如下所示:

Name     Amount
---------------
Alice       100
Bob          50
Charlie     200
Alice        30
Charlie      10

我想选择 Name 是集合中多个值之一的所有行 {Alice, Bob}

Name     Amount
---------------
Alice       100
Bob          50
Alice        30

问题

在 Pandas 中执行此操作的有效方法是什么?

我看到的选项

  1. 遍历行,使用 Python 处理逻辑
  2. 选择并合并许多语句,如下所示

    merge(df[df.name = specific_name] for specific_name in names) # something like this
    
  3. 执行某种连接

这里的性能权衡是什么?什么时候一种解决方案比其他解决方案更好?我缺少什么解决方案?

虽然上面的示例使用字符串,但我的实际工作使用匹配数百万行的 10-100 个整数,因此快速 NumPy 操作可能是相关的。

最佳答案

您可以使用 isin系列方法:

In [11]: df['Name'].isin(['Alice', 'Bob'])
Out[11]: 
0     True
1     True
2    False
3     True
4    False
Name: Name, dtype: bool

In [12]: df[df.Name.isin(['Alice', 'Bob'])]
Out[12]: 
    Name  Amount
0  Alice     100
1    Bob      50
3  Alice      30

关于python - 有效地选择与 Pandas DataFrame 中多个值之一匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22485375/

相关文章:

python - SQLAlchemy 属性错误 : 'property' object has no attribute 'translate'

python - Python 类型提示语法如何/为什么起作用?

python - 声明大小未知的 2D numpy 数组

python - 如何使用 Pandas 并行读取 .xls?

Python - 处理 Unicode 解码错误 'utf8'

python - 在python中使用查询时出现问题

python - 唯一常量引用

python - 安装 lxml : Error: open CFI at the end of file; missing . cfi_endproc 指令

python - 是否有 Numpy 或 Pandas 设置在创建 NaN 值时发出警告

python - 使用 psycopg2 复制到带有 ARRAY INT 列的表