Ich*_*xgo 6 python dataframe pandas
我正在寻找最快的方法来删除一组已获得索引的行,或者从大型 Pandas DataFrame 中获取这些索引差异的子集(这会产生相同的数据集)。
到目前为止,我有两种解决方案,对我来说似乎相对较慢:
df.loc[df.difference(indices)]
在我的数据集上大约需要 115 秒
df.drop(indices)
在我的数据集上大约需要 215 秒
有没有更快的方法来做到这一点?最好是熊猫。
df[~df.index.isin(indices)]
@jezrael我相信您可以创建布尔掩码、反转~
和过滤boolean indexing
:
df1 = df[~df.index.isin(indices)]
Run Code Online (Sandbox Code Playgroud)
正如 @user3471881 提到的,如果您打算df
稍后操作过滤器,则需要避免链式索引,添加copy
:
df1 = df[~df.index.isin(indices)].copy()
Run Code Online (Sandbox Code Playgroud)
此过滤取决于匹配索引的数量以及数据帧的长度。
因此,另一种可能的解决方案是创建array/list
索引来保留,然后不需要反转:
df1 = df[df.index.isin(need_indices)]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7724 次 |
最近记录: |