在任何数据帧上使用重新索引方法时,为什么原始值会丢失?

数据挖掘 Python 熊猫 数据框 数据索引技术
2022-03-02 23:47:24

这是原始数据框: 我想要的:我想将上面的数据框转换为这个多索引列数据框: 我设法通过这段代码做到了:在此处输入图像描述 在此处输入图像描述

# tols : original dataframe
cols = pd.MultiIndex.from_product([['A','B'],['Y','X'] 
['P','Q']])
tols.set_axis(cols, axis = 1, inplace = False)

我尝试了什么:reindex我尝试用这样的方法来做到这一点:

cols = pd.MultiIndex.from_product([['A','B'],['Y','X'], 
['P','Q']])
tols.reindex(cols, axis = 'columns')

结果是这样的输出: 在此处输入图像描述

我的问题: 正如您在上面的输出中看到的那样,我的所有原始数值在使用该reindex方法时都丢失了。文档页面中明确提到: 使用可选填充逻辑将 DataFrame 与新索引一致,将 NA/NaN 放置在先前索引中没有值的位置。除非新索引等同于当前索引,否则将生成一个新对象。所以我不明白:

  • reindex我在使用该方法丢失原始值时特别错误在哪里
  • 我应该如何reindex正确使用该方法来获得我想要的输出
1个回答

关于您的代码,tols必须是cols

cols = pd.MultiIndex.from_product([['A','B'],['Y','X'] 
['P','Q']])
tols.set_axis(cols, axis = 1, inplace = False)

这必须是:

cols = pd.MultiIndex.from_product([['A','B'],['Y','X'] 
['P','Q']])
cols.set_axis(cols, axis = 1, inplace = False)

就个人而言,我会在执行多索引之前使用默认值删除 nan 。

df_noNAN = from_product.fillna(value=-1)

在您的情况下,看起来原地正在产生错误并更好地报告给熊猫团队。在 Stack exchange 上,他们反应迅速。