python - Pandas MultiIndex 的简单用例

标签 python pandas

我正在尝试在 Pandas 数据帧上编写一个简单的查询

A B C
0 1 2.1
0 2 3.0
0 3 4.0
1 0 4.0

我想选择所有行WHERE A=0 and B>1所以我期望作为输出

A B C
0 2 3.0
0 3 4.0

我定义我的 DataFrame 如下

df = pd.DataFrame([{'A': 0, 'B': 1, 'C': 2.1}, {'A': 0, 'B': 2, 'C': 3.0}, {'A': 0, 'B': 3, 'C': 4.0}, {'A': 1, 'B': 0, 'C': 4.0}])

然后执行以下查询

df[ (df["A"] == 0) & (df["B"] > 1) ]

   A  B    C
1  0  2  3.0
2  0  3  4.0

它可以工作,但在我的实际用例中它很慢,因为有更多的行。

浏览 Pandas 之后MultiIndexing doc ,我不清楚如何使用索引来提高上述查询的性能。有没有办法可以使用索引提高上述查询的性能?

最佳答案

您可以查询底层 numpy 数组而不是原始数据帧:

%timeit df[(df["A"] == 0) & (df["B"] > 1) ]
#1000 loops, best of 3: 1.23 ms per loop

ar = df.values
%timeit ar[(ar[:,0] == 0) & (ar[:,1] > 1)]
#100000 loops, best of 3: 11.5 µs per loop

如果要保留原始索引,请在运行查询之前将其转换为列,然后再返回索引。

关于python - Pandas MultiIndex 的简单用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49089238/

相关文章:

python - 从函数/类返回后如何使列表为空

python - 在Python中复制复合对象

python - 如何在数据集中使用 read_csv 并以损坏的管道 "¦"作为分隔符???

python - 使用 Pandas,如何根据 "master sheet"中的一列组合多个工作表?

python - 选择 Pandas DataFrame 的子集

python - 在一行中排序数字

python - 在 OSX 中安装 QGIS 3.2 - 现有的 Python 2.7 不允许我

python - 我们可以用 python virtualenv 设置 cpu 内存要求吗

Python Pandas : How to make a column row dependent on it's previous rows, 可能有一个函数吗?

python - 替换python 3中的第一个字符串字符