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

按日期设置索引并分组后仅返回NaN值的Pandas问题

问题分析与解决

你的代码出现全NaN的原因有两个:

  1. 分组逻辑错误:仅按token_address分组,计算的是该token所有日期的整体中位数,而非每日每个token的中位数,不符合需求。
  2. 索引不匹配:groupby('token_address')['close'].median()返回的结果以token_address为索引,原DataFrame用默认数字索引,pandas无法将两者对齐,因此填充NaN。

正确解法

方法1:用transform直接生成对应列(推荐)

transform会保留原DataFrame的索引结构,直接将分组计算的中位数映射到每一行:

df['date'] = pd.to_datetime(df['date'])
df['median'] = df.groupby(['token_address', 'date'])['close'].transform('median')

方法2:先计算中位数表再合并

如果需要单独保存每日每个token的中位数结果,可先分组计算,再通过merge合并回原表:

df['date'] = pd.to_datetime(df['date'])
# 计算每日每个token的中位数并重置索引
median_df = df.groupby(['token_address', 'date'])['close'].median().rename('median').reset_index()
# 合并到原表
df = df.merge(median_df, on=['token_address', 'date'], how='left')

执行后,median列会正确显示对应日期、对应token的close价格中位数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:50:34