【发布时间】:2019-10-28 04:38:09
【问题描述】:
我有一个数据框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)
我有另一个数据框,其值为id 和val,我想保留在d 中。我想保留大约 600,000 个 id 和 val 组合:
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 进行切片的最快方法是什么?
【问题讨论】:
-
操作!请接受WeNYoBen 的回答,因为我相信您会获得 2 倍的速度。
-
谢谢!请注意,
MultiIndex.from_frame是 .24 中的新内容。烦人的是,我必须在带有 pandas .23 的服务器上运行它。 -
那么组合应该可以工作
d.reindex(list(zip(*map(keep.get, keep)))]) -
完美,谢谢!这似乎比 .loc
标签: python pandas indexing slice