如何在MultiIndex DataFrame排序时为不同层级指定对应key函数?
为MultiIndex不同层级分别指定排序Key函数
当需要对MultiIndex类型的DataFrame的不同层级应用不同的排序转换函数时,只需给sort_index()方法的key参数传入与level参数列表长度匹配的函数列表,列表中每个函数对应level里对应位置的层级。
完整示例代码
import pandas as pd import numpy as np np.random.seed(3) # 创建MultiIndex DataFrame choice = lambda a, n: np.random.choice(a, n, replace=True) df_multi = pd.DataFrame({ 'one': pd.Series(choice(['a', 'B', 'c'], 8)), 'two': pd.Series(choice([1, -2, 3], 8)), 'A': pd.Series(choice([2,6,9,7] ,8)) }) df_multi = df_multi.set_index(['one', 'two']) # 定义各层级的排序转换函数 func_1 = lambda s: s.str.lower() # 对'one'层级转小写后排序 func_2 = lambda x: np.abs(x) # 对'two'层级取绝对值后排序 # 为不同层级分别指定key函数排序 m_sorted = df_multi.sort_index( level=['one', 'two'], key=[func_1, func_2] ) # 验证排序结果 print(m_sorted.index)
效果说明
level=['one', 'two']指定排序优先级:先按'one'层级排序,再按'two'层级排序key=[func_1, func_2]对应分配函数:给'one'层级应用func_1(转小写后比较),给'two'层级应用func_2(取绝对值后比较)- 最终排序后的索引会先按'one'的小写字母顺序排列,再按'two'的绝对值大小排列
注意:该特性要求pandas版本≥1.4.0,此版本开始支持
key参数传入函数列表对应MultiIndex的多层级。
内容的提问来源于stack exchange,提问作者mins
相关产品推荐
相关产品推荐

