Pandas GroupBy两种操作场景的类型差异疑问
场景1与场景2的GroupBy结果类型差异解析
核心差异完全是变量赋值的时机和对象不同,拆解两个场景的逻辑就能明白:
场景1:链式调用的结果赋值
场景1的代码是把整个链式操作的最终结果赋值给了data_g:
data_g = data.groupby('TheId', group_keys=True).apply(lambda x: x.drop('TheId', axis=1)).reset_index()
拆解步骤:
data.groupby(...)返回DataFrameGroupBy对象- 接着调用
.apply(...),会把每个分组处理后的子DataFrame合并成一个新的DataFrame - 最后调用
.reset_index()重置索引,返回的还是DataFrame类型 - 最终把这个经过完整处理的DataFrame赋值给了
data_g,所以打印类型时显示是DataFrame
场景2:仅赋值GroupBy对象
场景2的代码只把初始的GroupBy对象赋值给了data_g:
data_g = data.groupby('TheId', group_keys=True) data_g.apply(lambda x: x.drop('TheId', axis=1)).reset_index()
拆解步骤:
- 第一步就把
DataFrameGroupBy对象直接存到了data_g里 - 后续的
.apply(...).reset_index()确实会生成处理后的DataFrame,但这个结果没有重新赋值给data_g data_g自始至终都是最初的GroupBy对象,所以打印类型时显示的是DataFrameGroupBy
简单说,场景1是把"分组→处理→重置索引"的最终结果存起来,场景2是只存了"分组"这一步的对象,后续处理的结果没存到data_g里。
内容的提问来源于stack exchange,提问作者user3532529
相关产品推荐
相关产品推荐

