Pandas .groupby()在apply无操作时会智能跳过分组处理吗?
Pandas groupby.apply的特殊行为解析
先准备测试数据:
import pandas as pd test = pd.DataFrame([{'a': 1, 'b': 15}, {'a':1, 'b': 14}])
两种apply场景的差异
场景1:带数据过滤的apply
执行如下代码:
test.groupby('a').apply(lambda x: x.iloc[:-1])
返回结果符合预期,分组键a被设为索引:
a b a 1 0 1 15
场景2:无操作的apply
但如果执行无操作的lambda:
test.groupby('a').apply(lambda x: x)
返回的却是原DataFrame,分组键并没有成为索引:
a b 0 1 15 1 1 14
原因解析
这是Pandas内置的性能优化逻辑:当apply的返回值和分组后的子DataFrame完全一致(结构、索引、数据均未改动)时,Pandas会直接返回原DataFrame,跳过添加分组索引的步骤,避免做无意义的重复计算。
强制保留分组索引的方法
如果想要让无操作的apply也返回带分组索引的结果,可以对子DataFrame做一个不影响数据的微小修改,比如返回副本:
test.groupby('a').apply(lambda x: x.copy())
此时返回结果就会带上分组索引:
a b a 1 0 1 15 1 1 14
内容的提问来源于stack exchange,提问作者Ken Yang
相关产品推荐
相关产品推荐

