Python中如何为groupby内lambda函数设置名称表头?
如何修改Pandas GroupBy聚合后的表头,让终端用户更容易理解
你现在遇到的是Pandas多级列名不够直观的问题,原来的agg操作生成的二级列名用的是函数名(sum、<lambda>),确实对终端用户不友好。这里有两种简单的解决办法:
方法1:聚合时直接指定自定义列名
在使用agg的时候,给每个聚合函数搭配一个有意义的别名(用元组(别名, 函数)的形式),这样生成的表头直接就是清晰的名称:
import numpy as np import pandas as pd # 你的原有分组逻辑 groups = df[df['isTrade'] == 1].groupby('dateTime') # 修改agg的写法,给每个聚合函数指定别名 grouped = groups.agg({ 'tradeBid': [ ('总交易出价金额', np.sum), # 把sum结果命名为"总交易出价金额" ('非零出价次数', lambda x: (x > 0).sum()) # 把计数结果命名为"非零出价次数" ] })
这样生成的grouped的列结构会是:
| dateTime | tradeBid | |
|---|---|---|
| 总交易出价金额 | 非零出价次数 |
如果觉得多级列名还是有点繁琐,还可以把它扁平化,合并成单级列名:
# 把多级列名用下划线连接,变成单级 grouped.columns = ['_'.join(col) for col in grouped.columns.values]
处理后列名就会变成tradeBid_总交易出价金额和tradeBid_非零出价次数,更适合终端用户查看。
方法2:聚合后重命名列名
如果已经执行完原有的聚合操作,也可以直接修改已生成的grouped的列名:
# 直接替换成你需要的名称 grouped.columns = ['总交易出价金额', '非零出价次数']
这种方法更直接,适合快速调整表头。
你可以根据终端用户的理解习惯,选择合适的命名,比如把“非零出价次数”改成“有效交易出价次数”之类的,只要贴合业务含义就好。
内容的提问来源于stack exchange,提问作者Giladbi
相关产品推荐
相关产品推荐

