我正在尝试使用表格函数过滤包含 columns A
和 B
的 pandas 数据框 df:我想保留 df 中的所有值。 B
值超过了取决于 df.A
的限制,即 df.B>limit[i]
其中 i 是根据 df 计算的。 A
像 i=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/