使用groupby和mean时如何保持DataFrame列顺序不变?
使用groupby和mean时保持原DataFrame列顺序的方法
问题场景
使用groupby结合mean聚合时,结果的Series索引(对应原DataFrame的列)会被自动排序,无法匹配原DataFrame的列顺序。
示例代码
import pandas as pd df = pd.DataFrame({'f':[[1,2,30],[4,2,7]],'o':[[1,4,5],[7,1,3]],'e':[[6,7,4],[4,5,7]]})
当前代码与输出
执行以下代码:
df.stack().str[1].groupby(level=1).mean()
得到排序后的输出:
e 6 f 2 o 2.5 dtype: float64
期望输出
保持原DataFrame的列顺序f→o→e:
f 2 o 2.5 e 6 dtype: float64
解决方案
方法1:groupby时设置sort=False
groupby默认参数sort=True会对分组键排序,设置为sort=False后,分组将按照分组键首次出现的顺序聚合,而stack操作中列名的首次出现顺序与原DataFrame完全一致:
df.stack().str[1].groupby(level=1, sort=False).mean()
方法2:用原DataFrame列名重新索引结果
如果已经得到聚合结果,可通过reindex方法传入原DataFrame的列名,强制恢复原始列顺序:
result = df.stack().str[1].groupby(level=1).mean() result = result.reindex(df.columns)
内容的提问来源于stack exchange,提问作者user15649753
相关产品推荐
相关产品推荐

