Python按年月分组求后缀_values列标准差最小TopK列,修复TypeError问题
问题修复方案
错误原因
- 你调用了Python标准库
statistics模块的stdev()函数,该函数仅支持输入一维数值序列计算标准差,但你传入的group[value_cols]是包含多列的DataFrame对象,函数无法识别该输入格式,因此抛出类型转换错误。
修复方法
直接使用Pandas自带的.std()方法,该方法默认按列计算DataFrame的标准差,刚好匹配你的需求,无需额外引入标准库的stdev。
修复后完整代码
import pandas as pd import numpy as np np.random.seed(2021) dates = pd.date_range('20130226', periods=90) df = pd.DataFrame(np.random.uniform(0, 10, size=(90, 6)), index=dates, columns=['A_values', 'B_values', 'C_values', 'D_values', 'E_values', 'target']) k = 3 # 取前3个标准差最小的列 value_cols = df.columns[df.columns.str.endswith('_values')] def find_topK_smallest_std(group): # 替换为pandas自带的std方法按列计算标准差 std = group[value_cols].std() cols = std.nsmallest(k).index out_cols = [f'std_{i+1}' for i in range(k)] rv = group.loc[:, cols] rv.columns = out_cols return rv result = df.groupby(pd.Grouper(freq='M'), dropna=False).apply(find_topK_smallest_std)
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

