Pandas多索引DataFrame分组生成新列失败,值为NaT求解决
解决MultiIndex DataFrame添加分组最小日期列的问题
你的代码出现全NaT的原因是:reset_index()后得到的DataFrame是普通整数索引,分组transform生成的Series也是整数索引,而原df是ticker+date的MultiIndex,两者索引无法对齐,导致赋值时匹配失败,全部填充NaT。
下面是两种可行的解决方法:
方法1:跳过索引对齐直接赋值
直接提取transform结果的数组值,绕开索引不匹配的问题:
df['date_min'] = df.reset_index().groupby('ticker')['date'].transform('min').values
方法2:直接操作MultiIndex层级(更高效)
无需重置索引,直接从MultiIndex中提取层级数据进行分组计算,再映射回原df:
# 计算每个ticker对应的最小日期 min_dates = df.index.get_level_values('date').groupby(df.index.get_level_values('ticker')).min() # 将ticker映射为对应的最小日期 df['date_min'] = df.index.get_level_values('ticker').map(min_dates)
验证结果
执行上述任意一种方法后,df会得到正确的date_min列:
price date_min ticker date AAPL 2022-10-09 100 2022-10-09 2022-10-10 95 2022-10-09 MSFT 2022-10-08 200 2022-10-08 2022-10-09 150 2022-10-08
内容的提问来源于stack exchange,提问作者Dmitry Kozlov
相关产品推荐
相关产品推荐

