python - pandas:切片 Multiindex 有很多索引

标签 python pandas indexing slice

我有一个数据框 d,其中包含大约 100,000,000 行和 3 列。它看起来像这样:

import pandas as pd 

In [17]: d = pd.DataFrame({'id': ['a', 'b', 'c', 'd', 'e'], 'val': [1, 2, 3, 4, 5], 'n': [34, 22, 95, 86, 44]}) 

In [18]: d.set_index(['id', 'val'], inplace = True)

我有另一个数据框,其中包含 idval 的值,我想将其保留在 d 中。我想保留大约 600,000 个 idval 的组合:

In [20]: keep = pd.DataFrame({'id':['a', 'b'], 'val' : [1, 2]})

我试过以下方法:

In [21]: keep.set_index(['id', 'val'], inplace = True)

In [22]: d.loc[d.index.isin(keep.index), :] 
Out [22]:         
                   n
         id val    
          a  1    34
          b  2    22

这行得通,但看起来很笨重,而且速度很慢。这里有更好的方法吗?在 pandas 中切片 Multindex 的最快方法是什么?

最佳答案

使用重新索引

d.reindex(pd.MultiIndex.from_frame(keep))
Out[151]: 
         n
id val    
a  1    34
b  2    22

关于python - pandas:切片 Multiindex 有很多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56582957/

相关文章:

python - 绘制多个 seaborn 分布图

python - 如何将数据框中的 2 行连接到新数据框中的 1 行?

python - Biopython 可以执行 Seq.find() 解释歧义代码吗

python - 如何跟踪从多处理池返回的异步结果

python - 无论如何检测 Python SocketServer.TCPServer 中的客户端断开连接?

python - 累积总和在组内降序排列。 Pandas

python - 解析多列 pandas

mysql - 从表中删除索引

php - 三个字段的索引/键或 concat() 字段到另一列

Python 脚本,运行迭代谷歌搜索并打印热门结果和链接