python - 通过多个条件选择行的惰性方式
问题描述
具有分类值的列的典型设置如下:
df = pd.DataFrame([('A', 'buy', 'sub'),
('B', 'sell', 'prior'),
('C', 'hold', 'sub'),
('D', 'loan', 'none'),
('A', 'hold', 'sub'),
('A', 'buy', 'none')], columns=['name', 'action', 'class'])
name action class
1 A buy sub
2 B sell prior
3 C hold sub
4 D loan none
5 A hold sub
6 A buy none
假设我想从这个线程中选择具有多个条件的行,我可以这样做:
#selecting rows with name='A' AND action='buy'
df1 = df[(df['name']=='A') & (df['action']=='buy')]
#selecting rows with name='A' OR class='sub'
df2 = df[(df['name']=='A') | (df['class']=='sub')]
对于具有更多列和更多选择条件的数据框,上面的操作看起来很难看(即&
and的长语句|
)。我想做一些更紧凑的事情,像这样:
df1 = df[df[['name', 'action']] == ('A', 'buy')]
df2 = df[df[['name', 'class']] *** ('A', 'sub')] *** is hybrid operator, maybe?
有什么懒惰的方法吗?如果没有这样的方式,请随时建议关闭此问题。谢谢。
解决方案
您可以为此使用 pandas 查询:
df.query('name == "A" and action=="buy"')
name action class
0 A buy sub
5 A buy none
如果您确定要查询的列,您可以将它们移动到索引中并通过 MultiIndexing 进行选择:
df = df.set_index(['name', 'action'])
df = df.sort_index() # avoid performance issues
df.loc(axis=0)['A', 'buy']
class
name action
A buy sub
buy none
推荐阅读
- cassandra - 如何使用连接属性(url 属性)通过 ssl 连接 Cassandra
- python - 使用 Python 将文件夹上传到 Azure Blob
- ajax - 无法用新数据重新加载 dataTable
- deep-learning - 非平方图像作为 YOLOv3 的输入
- sbt - 与涉及 scala.xml.Elem 的 Binding.scala 的类型不匹配
- php - findBy - 在 Symfony 中更新多条记录
- vb.net - 设置 DataGridViewComboBoxColumn ItemHeight
- kubernetes - AWS ALB 入口控制器无法通过 TLS 解析
- python - 等待元素。根据是否出现不同的效果。硒蟒
- user-interface - 斯库里改变屏幕尺寸