You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame列.describe()结果写入新DataFrame并按列分组?

解决分组后describe结果格式化的TypeError问题

你遇到的问题核心在于:groupby('SITE')['DSKPERCENT'].describe()返回的是一个层次化索引的DataFrame,每一行对应一个SITE的所有统计指标(count、mean、std等)。你原来用的apply(lambda x: format(x, 'f'))默认是按列(axis=0)处理,此时x是一个包含所有SITE对应统计项的Series,而format()函数只能处理单个数值,自然会抛出TypeError。

下面给你两种常见需求的解决方案:

方案1:将每个分组的统计信息合并为单个字符串列

如果你想把每个SITE的所有统计结果打包成一个字符串,放到名为SITE_DESCRIBE的列中,可以这样写:

import pandas as pd

# 假设你的源DataFrame名为df
df5 = df.groupby('SITE')['DSKPERCENT'].describe().apply(
    lambda row: ', '.join([f'{stat}: {value:.2f}' for stat, value in row.items()]),
    axis=1  # 指定按行处理,axis=1代表每一行对应一个SITE的统计结果
).reset_index(name='SITE_DESCRIBE')

这段代码会把每个SITE的统计项(比如count、mean)和对应数值格式化为统计项: 数值的格式,再用逗号拼接成字符串,最终得到包含SITE和SITE_DESCRIBE两列的DataFrame。

方案2:保留所有统计列,格式化数值

如果你希望保留count、mean、std等独立列,只是把数值格式化为普通浮点数(避免科学计数法),可以使用applymap对每个元素单独处理:

# 获取分组统计结果
descr_result = df.groupby('SITE')['DSKPERCENT'].describe()
# 对每个数值元素格式化(这里保留2位小数,可根据需求调整)
formatted_result = descr_result.applymap(lambda x: f'{x:.2f}')
# 重置索引得到最终DataFrame
df5 = formatted_result.reset_index()

如果不需要把数值转成字符串,只是想在显示时用浮点数格式,可以设置Pandas的显示选项:

pd.options.display.float_format = '{:.2f}'.format
# 之后直接查看descr_result就会以指定格式显示

为什么原来的代码报错?

你原来的代码中,apply默认是按列(axis=0)执行,此时lambda x中的x是一列数据(比如所有SITE的count值组成的Series),而format(x, 'f')试图把整个Series当作单个数值来格式化,这显然不符合format函数的参数要求,所以触发了TypeError。

内容的提问来源于stack exchange,提问作者odonnry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:37:33