【问题标题】:Advanced Python Pandas Dataframe Selection高级 Python Pandas 数据框选择
【发布时间】:2015-05-17 23:38:57
【问题描述】:

假设您有以下使用代码构建的数据框:

import numpy as np
from pandas import *

headers = ['name', 'rating']

data = (['John', .987], ['Joe', .543], ['Mary', .294], ['Bill', .784])

df = Dataframe(data, columns = headers)

我知道我可以进行数据框选择,例如 df.namedf[['rating']] 一次访问一列,或 df[2:3] 进行行切片,但我似乎无法将两者结合起来。如果我想要所有评级高于 0.500 的行怎么办?这似乎不起作用:

df[df.rating > .5]

df.where(df.rating > .5)

第一个可以在 R 中使用。在文档 The where() Method and Masking () 中,示例是:

s.where(s > 0)

然而,这是非常有限的,因为我们很少希望根据所有列和所有行选择一个新对象(事实上,我从来没有这个需要)。我知道 Python 中的数据帧不等于 R 中的数据帧,但仍然需要。

  1. 如何选择满足特定数字标准的行?相等的 到df[df.rating > .5]
  2. 如何根据列表选择行?相当于df[df.name in ('John', 'Joe')]'
  3. 我可以对列过滤器和行过滤器进行切片吗?相当于 df[df.rating > .5, df.name in ('John', 'Joe')]

我觉得高级切片缺乏帮助,而 R 在 Subsetting 方面更胜一筹

【问题讨论】:

  • 谢谢 - 我意识到我做错了什么。在我的示例中,我的演示数据很好,但在我的应用程序中,所有值都是 str 而不是 int,并且不允许我按照我的意愿进行切片。愚蠢的我 - 谢谢!

标签: python r numpy pandas dataframe


【解决方案1】:

我运行了你的代码,这应该可以工作:

#1:
df[df['rating']>0.5]
#2:
df.query('name in ("John", "Mary")') 
#3:
df.query('name in ("John", "Mary") and rating > 0.5') 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多