Pandas分组计算中位数赋值报错:TypeError与KeyError问题求助
解决方案
错误原因分析
- 第一次报错:
groupby(['token_address', 'date'])['close'].median()返回的是带有(token_address, date)多级索引的Series,而原DataFrame使用的是默认整数索引,两者索引不兼容,无法直接赋值。 - 第二次报错:添加
as_index=False后,groupby返回的是包含token_address、date、close三列的DataFrame(其中close列是分组中位数),你试图将整个二维DataFrame赋值给一维列,自然会触发形状不匹配的错误;同时reset_index(level=0)用法错误,因为此时的索引是默认整数索引,不存在多级索引的level=0。
正确实现方式
方法一:使用transform(推荐)
transform会自动将分组计算的中位数广播回原DataFrame的每一行,完美匹配原索引:
prices_DEX['median'] = prices_DEX.groupby(['token_address', 'date'])['close'].transform('median')
方法二:先计算中位数再合并
如果需要先单独得到中位数结果再合并,可采用以下方式:
# 计算分组中位数并重命名列 median_df = prices_DEX.groupby(['token_address', 'date'], as_index=False)['close'].median() median_df.rename(columns={'close': 'median'}, inplace=True) # 合并回原DataFrame prices_DEX = prices_DEX.merge(median_df, on=['token_address', 'date'], how='left')
内容的提问来源于stack exchange,提问作者Olive
相关产品推荐
相关产品推荐

