Pandas 0.22.0中GroupBy按字典分组结果不符合预期问题
问题解析与解决方案
这个问题在Pandas 0.22.0版本中是因为groupby使用字典作为by参数时的行为特性导致的:当你传入的字典只包含部分索引值的映射时,未在字典键中出现的索引值会被当作独立的分组键,而不会自动归入同名的分组里。
你的原代码里,by字典只定义了'11-1001'和'11-1002'到'11-1000'的映射,但没有包含'11-1000'自身的映射。此时Pandas会把'11-1000'作为单独的分组,而'11-1001'和'11-1002'虽然映射到'11-1000',但由于原索引'11-1000'不在字典的键中,导致分组逻辑和预期不符。
解决方法
你可以通过index.map()方法生成完整的分组键序列,确保所有索引值都被正确映射:
import pandas as pd import numpy as np # 初始化DataFrame kwargs = { 'index': ['11-1000', '11-1001', '11-1002'], 'data': np.random.randint(5, size=(3,2)), 'columns': ['A', 'B'] } df = pd.DataFrame(**kwargs) # 定义分组映射字典 by = {'11-1001': '11-1000', '11-1002': '11-1000'} # 生成完整的分组键:对于不在字典中的索引值,保留自身作为分组键 group_keys = df.index.map(lambda idx: by.get(idx, idx)) # 执行分组并获取目标组 grouped = df.groupby(group_keys) result = grouped.get_group('11-1000') print(result)
这样就能得到包含'11-1000'、'11-1001'、'11-1002'三行的分组结果,完全符合预期。
补充说明
如果你的环境允许升级Pandas到0.23.0及以上版本,这个分组行为有了更直观的优化;但如果需要兼容0.22.0版本,上述的map方法是最可靠的解决方案。
内容的提问来源于stack exchange,提问作者Ironbeard
相关产品推荐
相关产品推荐

