如何按Object类型列分组计算Pandas DataFrame数值列的标准差
按continent分组计算数值列标准差的解决方法
首先是你的DataFrame初始化代码:
import pandas as pd data = { 'country_code': ['AFG', 'AGO', 'ALB', 'ARE', 'ARG'], 'country_name': ['Afghanistan', 'Angola', 'Albania', 'United Arab Emirates', 'Argentina'], 'continent': ['Asia', 'Africa', 'Europe', 'Asia', 'South America'], 2010: [11.35, 9.43, 14.09, 2.48, 7.71], 2011: [11.05, 7.36, 13.48, 2.30, 7.18], 2012: [11.34, 7.35, 13.38, 2.18, 7.22], 2013: [11.19, 7.37, 15.87, 2.04, 7.10], 2014: [11.14, 7.37, 18.05, 1.91, 7.27] } df = pd.DataFrame(data)
你之前的代码报错,是因为df.select_dtypes('number')会过滤掉所有非数值列(包括continent),导致分组时找不到该列。以下是三种可行的解决方法:
方法一:先分组再筛选数值列
先按continent完成分组,再对每组筛选数值列并计算标准差:
df.groupby('continent').select_dtypes('number').std()
方法二:保留continent列后再筛选
先将continent列和所有数值列组合成新的数据集,再执行分组计算:
# 拼接目标列列表:continent + 所有数值列 target_cols = ['continent'] + df.select_dtypes('number').columns.tolist() df[target_cols].groupby('continent').std()
方法三:使用agg指定列计算标准差
通过字典明确指定需要计算标准差的数值列,再进行分组聚合:
# 生成数值列与std方法的映射字典 std_dict = {col: 'std' for col in df.select_dtypes('number').columns} df.groupby('continent').agg(std_dict)
内容的提问来源于stack exchange,提问作者M.Shaker Nayyal
相关产品推荐
相关产品推荐

