减少 unstack() 的使用可以提高 可读性 和 效率,主要原因如下:
1. 提高可读性
unstack()主要用于将MultiIndex的 DataFrame 转换为宽表,这通常会增加数据的复杂性,使代码更难理解。apply()已经处理完groupby操作后,一般reset_index()可能就足够了,避免了额外的索引变换操作。- 直接使用
.reset_index()而不是unstack()可以让 DataFrame 结构更直观,便于后续计算。
2. 提高效率
unstack()需要重新排列MultiIndex,并将部分数据填充为 NaN(如果有缺失值),这一过程涉及额外的计算和存储。unstack()可能导致 稀疏数据结构,引入额外的 NaN 值,而后续计算(如min()、max())可能需要额外处理这些 NaN,影响性能。- 直接
reset_index()保持数据的原始结构,减少索引操作,从而加快计算速度。
对比示例
使用 unstack()
df_concat = df.groupby(["modelCode", "channelCode"]).apply(price_).unstack()
- 这里
unstack()可能导致MultiIndex变成列索引,带来额外的 NaN 填充和索引转换成本。
优化后的写法
df_concat = df.groupby(["modelCode", "channelCode"]).apply(price_).reset_index()
- 这里
reset_index()直接展平索引,保留了数据的紧凑结构,不引入额外的 NaN,提高了计算效率。
总结
✅ 更直观:避免 MultiIndex 复杂性,代码更易读。
✅ 更高效:减少索引变换和 NaN 处理,提高性能。
✅ 更稳定:避免 unstack() 可能导致的 NaN 处理问题,使后续计算更加稳定。