无法打印多索引数据框以使用合并单元格表现出色

我有一个数据框df,如下所示:


Date        ConstraintType  Col1    Col2

2020-07-15  N-S             w1      521133

2020-07-15  N-S             w2      550260

2020-07-15  CSD             d1      522417

2020-07-15  CSD             d2      534542

2020-07-15  A               d4      534905

2020-07-15  B               d5      534904

数据帧的索引是:


df.index

Out[6]: 

MultiIndex([('2020-07-15',  'N-S'),

            ('2020-07-15',  'N-S'),

            ('2020-07-15',  'CSD'),

            ('2020-07-15',  'CSD'),

            ('2020-07-15', 'A'),

            ('2020-07-15', 'B')],

           names=['Date', 'ConstraintType'])

但是当我将它打印成 excel 时,它显示如下:

http://img.mukewang.com/640855f70001492a03230139.jpg

我期待以下内容:


http://img.mukewang.com/6408560300013a2003240138.jpg

我正在使用以下代码:

df.to_excel(r'C:\Users\ram\Desktop\z1.xlsx', merge_cells=True)


慕莱坞森
浏览 74回答 2
2回答

一只名叫tom的猫

从提供的 DataFrame 中:用于.reset_index()从索引中删除索引列使用where, 和.shift将所有单元格值设为空白,除了这些值在列Date和中的第一次出现ConstraintType。最后,使用.set_index将它们放回索引中,这次只有一个未重复的值并写入to_excel。现在,merge_cells=True 应该工作了。代码:df=df.reset_index()df['Date'] = df['Date'].where(df['Date'] != df['Date'].shift(), '')df['ConstraintType'] = df['ConstraintType'].where(df['ConstraintType'] != df['ConstraintType'].shift(), '')df = df.set_index(['Date', 'ConstraintType'])df.to_excel(r'C:\Users\ram\Desktop\z1.xlsx', merge_cells=True)输出:

婷婷同学_

在熊猫中,最里面的索引必须标记每一行。因此,必须手动处理最内层的索引,如@David Erickson 的回答所示。Pandas 自动隐藏外部索引;看下面的例子:import pandas as pdtuples = [["2020-07-15", "N-S"],          ["2020-07-15", "N-S"],          ["2020-07-15", "CSD"],          ["2020-07-15", "CSD"],          ["2020-07-15", "A"],          ["2020-07-15", "B"]         ]index = pd.MultiIndex.from_tuples(tuples, names=['Date', 'ConstraintType'])df = pd.DataFrame([    ["w1", 521133],    ["w2", 550260],    ["d1", 522417],    ["d2", 534542],    ["d4", 534905],    ["d5", 534904],], columns=["Col1", "Col2"],   index=index)print(df, '\n'*2)print(df.swaplevel(0,1))退货:                          Col1    Col2Date       ConstraintType             2020-07-15 N-S              w1  521133           N-S              w2  550260           CSD              d1  522417           CSD              d2  534542           A                d4  534905           B                d5  534904                          Col1    Col2ConstraintType Date                   N-S            2020-07-15   w1  521133               2020-07-15   w2  550260CSD            2020-07-15   d1  522417               2020-07-15   d2  534542A              2020-07-15   d4  534905B              2020-07-15   d5  534904重置索引,清理以前的多索引列,然后保存到 Excel,无需设置 merge_cells 选项:df = df.reset_index(drop=False)row_filt = df['ConstraintType'].eq(df['ConstraintType'].shift())df.loc[row_filt, 'ConstraintType'] = ''row_filt = df['Date'].eq(df['Date'].shift())df.loc[row_filt, 'Date'] = ''df.to_excel(r'C:\Users\ram\Desktop\z1.xlsx')生成以下 Excel:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python