Select rows from a DataFrame based on values in a column -pandas 筛选
  
  https://stackoverflow.com/questions/17071871/select-rows-from-a-dataframe-based-on-values-in-a-column-in-pandas
  
  pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。
  
  在SQL数据中, 我们可以用这样的语句:
  
  select * from table where colume_name = some_value.
  
  1
  
  1
  
  bool 索引
  
  在Pandas的DataFrame格式中可以采用 bool 值作为索引,选取数据行。比如:
  
  import pandas as pd
  
  # Create data set
  
  d = {'foo':[100, 111, 222],
  
  'bar':[333, 444, 555]}
  
  df = pd.DataFrame(d)
  
  # Full dataframe:
  
  df
  
  # Shows:
  
  # bar foo
  
  # 0 333 100
  
  # 1 444 111
  
  # 2 555 222
  
  # bool 值索引
  
  df[[True, False, True]] # 或 df.loc[[True, False, True]]
  
  # 都可以得到
  
  # bar foo
  
  #0 333 100
  
  #1 444 111
  
  所以,如果想通过数值来对行进行筛选,我们可以通过构造bool值来选择DataFrame的行
  
  df[df['column_name'] == some_value] 如果是数值型,也可以采用 >/<
  
  df[df['column_name'].isin(some_values)] some_values 可以是单个变量,也可以是list 或者迭代器
  
  组合多种条件
  
  df[(df['column_name'] == some_value) & df['other_column'].isin(some_values)]
  
  df[(df['column_name'] == some_value) | df['other_column'].isin(some_values)]
  
  #注意,& | 的优先级很高,所以每个条件都需要一个括号
  
  不等于,可以使用
  
  df[~df['column_name'].isin(some_values)]
  
  df[df['column_name'] != some_value]
  
  np.where
  
  与上面所述的方法有所不同, np.where 返回的是行的位置,所以在获取行时不能采用df, 要采用df.loc 或者 df.iloc
  
  np.where(df.A.values=='foo')
  
  # (array([0, 2, 4, 6, 7]),)
  
  df.iloc[np.where(df.A.values=='foo')]
  
  query
  
  DataFrame 提供了query函数,方便我们可以采用表达式来进行数据的筛选。
  
  参考:
  
  http://pandas.pydata.org/pandas-docs/version/0.17.0/indexing.html#indexing-query
  
  n = 10
  
  df = pd.DataFrame(np.random.randint(n, size=(n, 2)), columns=list('bc'))
  
  # b c
  
  # 0 9 0
  
  # 1 1 2
  
  # 2 2 4
  
  # 3 7 6
  
  # 4 6 4
  
  # 5 4 7
  
  # 6 2 9
  
  # 7 4 8
  
  # 8 6 2
  
  # 9 9 0
  
  df.query('index > b > c')
  
  # b c
  
  # 8 6 2
  
  #可以采用的表达式很多,比如
  
  df.query('(a < b) & (b < c)')
  
  df.query('a < b and b < c')
  
  时间测评
  
  import pandas as pd
  
  df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
  
  'B': 'one one two three two two one www.lieqibiji.com three'.split()})
  
  df.iloc[np.where(df.A.values=='foo')]
  
  %timeit df.iloc[np.where(df.A.values=='foo')]
  
  #1000 loops, best of 3: www.caihonyule.com/ 274 µs per loop
  
  %timeit df.loc[np.where(df.A.values=='foo')]
  
  #1000 loops, best of 3: 342 µs per loop
  
  %timeit df.loc[df['A'] == 'foo']
  
  #1000 loops, best of 3: 347 µs per loop
  
  %timeit df[df['A'] == 'foo']
  
  #1000 loops, best of 3: 354 www.feifanshifan8.cn µs per loop
  
  %timeit df.loc[df['A'].isin(['foo'])]
  
  #1000 loops, best of 3: 265 µs per loop
  
  %timeit df[df.A=='foo']
  
  #1000 loops, best of 3: 357 www.xingchexiu.com µs per loop
  
  %timeit df.query('(A=="www.qinlinyule.cn foo")')
  
  #1000 loops, best of 3: 943 µs per loop
  
  可以发现采用 df.iloc[np.where(df.A.values=='foo')]和 df.loc[df['A'].isin(['foo'])] 速度比较快, 而采用query的方法比较慢。
  
  df.loc[df['A'] == 'foo'] 速度快于 df[df['A'] == 'foo']

pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。的更多相关文章

  1. DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样

    '近日有本论坛网友问:DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样 '今晚正好闲着没事,加之以前也没用到过这个需求,所以就写了个模拟功能,供各位坛友酌情参考. ...

  2. NPOI之Excel——自动筛选、数字格式

    设置Excel的自动筛选功能 最新导出数据需要使用Excel的筛选功能,网上多方查找,终于在一个繁体的网站上找到了方法,呃,这个网站还是Java的,讲的是POI,不过.NET的NPOI也就一样用了. ...

  3. excel表格 筛选 通过mysql语句

    1.整理excel表格的数据 类似的 前面有其他符号的 都可以处理. 注意下一步是2个操纵:分别设置左右: 结果: 2.在复制粘贴到excel的时候,会有一些数字被设置成了科学计数法, 例如复制到ex ...

  4. cxGrid控件过滤筛选后如何获更新筛选后的数据集

    cxGrid控件过滤筛选后如何获更新筛选后的数据集 (2015-06-19 12:12:08) 转载▼ 标签: delphi cxgrid筛选数据集 cxgrid过滤 分类: Delphi cxGri ...

  5. 润乾报表新功能–导出excel支持锁定表头

     在以往的报表设计中,锁定表头是会经常被用到的一个功能,这个功能不仅能使浏览的页面更加直观,信息对应的更加准确,而且也提高了报表的美观程度.但是,很多客户在将这样的报表导出excel时发现exce ...

  6. 个人永久性免费-Excel催化剂功能第79波-自动及手动备份功能,比Onedrive还好用

    在OFFICE365里,有个自动保存功能,可惜保存的地址是在Onedrive里,在中国国情下,备份十分卡顿,近乎难以忍受的慢.虽然现在收费性的网盘部分是可以有文件版本的备份功能,但也是繁琐且最要命的是 ...

  7. 个人永久性免费-Excel催化剂功能第31波-数量金额分组凑数功能,财务表哥表姐最爱

    在财务工作过程中,很大时候需要使用到凑数的需求,花了两三天时间认真研究了一下,本人水平也只能做代码搬运工,在用户体验上作了一下完善.完成了Excel版的凑数功能. 文章出处说明 原文在简书上发表,再同 ...

  8. 微软Power BI 每月功能更新系列——11月Power BI 新功能学习

    Power BI Desktop11月产品功能摘要 本月Power BI Desktop 有一个大规模的更新.现在,通常可以使用复合模型在一个模型中将直接查询和导入源组合在一起.UserVoice上的 ...

  9. 2019微软Power BI 每月功能更新系列——3月Power BI 新功能学习

    Power BI3月产品功能更新发布啦!本次新功能新增了热图和单选切片器:完善了新的DAX功能和对现有功能的改进(例如按钮和选择窗格):同时官方表示建模视图的全面改进也正在进行中~Woo~那么,本月更 ...

随机推荐

  1. CF1110E Magic Stones 差分

    传送门 将原数组差分一下,设\(d_i = c_{i+1} - c_i\) 考虑在\(i\)位置的一次操作会如何影响差分数组 \(d_{i+1}' = c_{i+1} - (c_{i+1} + c_{ ...

  2. CF662C Binary Table FWT

    传送门 \(N \leq 20\)很小诶 一个暴力的思路是枚举行的翻转状态然后在列上贪心 复杂度为\(O(2^NM)\)显然过不去 考虑到可能有若干列的初始状态是一样的,那么在任意反转之后他们贪心的策 ...

  3. 重装系统之U盘设为第一启动项

    做好启动盘之后(教程:重装系统之制作U盘启动盘),接下来该设置U盘为第一启动项. 以我的电脑(华硕X450JN)为例,开机不停地按f2,进入系统引导界面. 其它牌子的电脑可以在开机时候试试esc,f1 ...

  4. Ionic app 上传图片之webApi接口

    App上传图片对应的webApi服务端是怎么处理的呢? using System; using System.Collections.Generic; using System.Diagnostics ...

  5. WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型

    首先声明,我还没有这么强大的功底,只是感觉博主写的很好,就做了一个复制,请别因为这个鄙视我,博主网址:http://www.cnblogs.com/landeanfen/p/5501487.html ...

  6. REST-framework快速构建API--生成Swagger接口文档

    一.Swagger概述 1.引言 当接口开发完成,紧接着需要编写接口文档.传统的接口文档使用Word编写,or一些接口文档管理平台进行编写,但此类接口文档维护更新比较麻烦,每次接口有变更,需要手动修改 ...

  7. Linux 小记 — Ubuntu 自动化配置

    前言 工欲善其事,必先利其器.经过多次的重复配置 ubuntu 开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本.服务器实例:ubuntu 16.04,技术栈:shell,pytho ...

  8. Individual Project - Word_frequency

    0x00 预先准备和时间规划 1.因为要用到visual studio 2013,准备学习C#,预计一天时间能基本使用. 3.了解需求并设计基本数据结构与大致流程 20min 2.根据提议实现simp ...

  9. linux内核分析第七次实验

    实验: rm menu -rf git clone https://github.com/megnning/menu.git cd menu ls mv test_exec.c test.c vi t ...

  10. 20150421 作业5 四则运算 测试与封装 5.1 5.2(doing)

    结伴队友:王佳寧,他的博客地址:http://www.cnblogs.com/paopaotai/ 5.2 黑白盒測試 測試項目名稱 黑盒測試 測試人員 葉子鵬&王佳寧 測試編號 測試頁面 測 ...