python - 使用表格功能过滤 Pandas 数据框

标签 python filter pandas

我正在尝试使用表格函数过滤包含 columns AB 的 pandas 数据框 df:我想保留 df 中的所有值。 B 值超过了取决于 df.A 的限制,即 df.B>limit[i] 其中 i 是根据 df 计算的。 Ai=floor(df.A)

不幸的是,我在 Python 方面经验不足。但我很清楚,逐元素比较效率很低,我发现函数 df.query 似乎对此有帮助,但我没有成功。

Excerpt of the data frame df:

datetime             A     B          
2014-05-31 03:30:00  2201  18.2
2014-05-31 03:40:00  2208  18.7
2014-05-31 03:50:00  2205  20.6
2014-05-31 04:00:00  2202  19.9
2014-05-31 04:10:00    22  18.2
2014-05-31 04:20:00  2204  18.2
2014-05-31 04:30:00  2198  18.1
2014-05-31 04:40:00  2204  19.1
2014-05-31 04:50:00  2202  20.3
2014-05-31 05:00:00  2205  20.8
...

limit = [  0.0,    10.0,   40.0,   100.0,   240.0,   300.0,   480.0, 800.0,  1000.0, 1400.0,  1600.0,  1800.0,  
1900.0,  1900.0, 1900.0,  1900.0, 1900.0,  1900.0,  1900.0,  1900.0,  1900.0  ]

我尝试了以下方法:

In [54]: df.query ( "df['A'] > limit[floor(df['B'])]")
... 
NotImplementedError: 'Call' nodes are not implemented

In [55]: df.query ( "df['A'] > limit[floor(2.3)]")
...
NotImplementedError: 'Call' nodes are not implemented

In [56]: df.query ( "df['A'] > limit[12]" )
Out[56]:     
datetime             A     B          
2014-05-31 03:30:00  2201  18.2
2014-05-31 03:40:00  2208  18.7
2014-05-31 03:50:00  2205  20.6
...

(it works)

我使用 Python 2.7.6.2、Numpy 1.8.0 和 Pandas 0.13.0

谁能解释一下为什么我不能在这个表达式中使用 floor 函数,分别如何完成这个过滤?

谢谢。

最佳答案

我认为你正在尝试做这样的事情?

lim = np.array(limit)
df['C'] = lim[ df.B.astype(int).values ]

      A     B     C
0  2201  18.2  1900
1  2208  18.7  1900
2  2205  20.6  1900

我只是使用整数截断而不是 floor 来节省一步。而且我认为无论您尝试做什么,都需要使用 numpy 数组而不是 python 列表。

关于python - 使用表格功能过滤 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25445796/

相关文章:

python - GPIO 引脚没有错误但没有得到预期的结果?

python - 如何仅在Python中使用reduce函数来创建类似过滤/删除的函数来删除列表中整数的实例

python - 使用 Python 和 SQL Server 的 ETL 过程需要很长时间才能加载

python - 在Python中访问条件迭代

python - 如何在 vim 中启用 python3?

javascript - D3 制作新的、更小的 CSV 文件

signal-processing - 低通滤波软件?

python - 从一个数据框中获取列名,并将它们作为空列添加到 Pandas 的另一个数据框中

python - numpy ndarray 到 Pandas 数据框

java - java中如何实现正则表达式替换功能?