multiindex.set_levels仅使用第一个列表项(熊猫)

时间:2020-09-23 16:11:18

标签: python pandas dataframe multi-index

在Python 3中工作。

我有一个由原始数据产生的数据框,主要是基本数据转换和空白校正等。最终数据产品是一个具有多索引列名称的数据框:

     sample_1     sample_2    ... sample_n
     bin binmass  bin binmass ... bin binmass
1     x1    y1     x2    y2   ...  xn    yn

,依此类推。索引级别0的列名是动态的,取自文件名。每个“ Bin”列都是相同的-最终数据是通过在样本列表上迭代的函数连接而成的。

出于某种原因,我想:

  1. 通过将每个“ Bin”和“ Binmass”列重命名为“ Sample_n Bin”或“ Sample_n Binmass”,将多索引减少为单个索引。
  2. 消除“ bin”列中除1之外的所有列。

为了完成任务1,我使用了以下代码:

l1=list(df.columns.get_level_values(0))
l2=list(df.columns.get_level_values(1))
l3=[]
for i,j in zip(l1, l2):
    g = i+" "+j
    l3.append(g)
df.columns.set_levels(l3, level=1, inplace=True)

问题是,此代码返回以下内容:

     sample_1                        sample_2                      ... sample_n
     sample_1 bin sample_1 binmass   sample_1 bin sample_1 binmass ... sample_1 bin sample_1 binmass
1     x1                y1               x2              y2        ...       xn            yn

首选结果将是:

     sample_1                        sample_2                      ... sample_n
     sample_1 bin sample_1 binmass   sample_2 bin sample_2 binmass ... sample_n bin sample_n binmass
1     x1                y1               x2              y2        ...       xn            yn

这会让我降低多索引的0级。

我确定:

len(l3)=len(df.columns.get_level_values(1))
type(l3)==list

,而l3确实通过Sample_1 bin创建了sample_n Binmass 如何让set_levels遍历l3

0 个答案:

没有答案