为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕莱坞森 2023-03-08 17:31:07
我有一个数据框df,如下所示:Date        ConstraintType  Col1    Col22020-07-15  N-S             w1      5211332020-07-15  N-S             w2      5502602020-07-15  CSD             d1      5224172020-07-15  CSD             d2      5345422020-07-15  A               d4      5349052020-07-15  B               d5      534904数据帧的索引是:df.indexOut[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 时,它显示如下:我期待以下内容:我正在使用以下代码:df.to_excel(r'C:\Users\ram\Desktop\z1.xlsx', merge_cells=True)
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

从提供的 DataFrame 中:

  1. 用于.reset_index()从索引中删除索引列

  2. 使用where, 和.shift将所有单元格值设为空白,除了这些值在列Date和中的第一次出现ConstraintType

  3. 最后,使用.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)

输出:

//img1.sycdn.imooc.com//6408561d00016f1202820170.jpg

查看完整回答
反对 回复 2023-03-08
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

在熊猫中,最里面的索引必须标记每一行。因此,必须手动处理最内层的索引,如@David Erickson 的回答所示。Pandas 自动隐藏外部索引;看下面的例子:


import pandas as pd


tuples = [["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    Col2

Date       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    Col2

ConstraintType Date                   

N-S            2020-07-15   w1  521133

               2020-07-15   w2  550260

CSD            2020-07-15   d1  522417

               2020-07-15   d2  534542

A              2020-07-15   d4  534905

B              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:

//img1.sycdn.imooc.com//640856300001896b04750160.jpg

查看完整回答
反对 回复 2023-03-08
  • 2 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信