首页 > 解决方案 > pandas lexsort 是否取决于排序顺序?

问题描述

我在 col2 和 col3 上创建了 2 个索引并对它们进行了排序。

import pandas as pd

d=pd.DataFrame([[1,4,4], [3,4,5], [2,4,5], [2,3,5],], columns=['col1','col2','col3'])

d.set_index(['col2', 'col3'], inplace=True)

d.sort_index(ascending=[False, True], inplace=True)
print('lexsort when ascending=[False, True] -> ' + str(d.index.is_lexsorted()))
print(d.loc[(4, 5)])

d.sort_index(ascending=[True, True], inplace=True)
print('lexsort when ascending=[True, True] -> ' + str(d.index.is_lexsorted()))
print(d.loc[(4, 5)])

我得到以下结果:

lexsort when ascending=[False, True] -> False
PerformanceWarning: indexing past lexsort depth may impact performance.
  print(d.loc[(4, 5)])
           col1
col2 col3      
4    5        3
     5        2
lexsort when ascending=[True, True] -> True
           col1
col2 col3      
4    5        3
     5        2
[Finished in 0.5s]

Q1:pandas lexsort 是否依赖排序顺序?

Q2:为什么性能警告只针对升序=[False, True]

标签: pythonpython-3.xpandas

解决方案


推荐阅读