2 回答

TA貢獻1906條經(jīng)驗 獲得超3個贊
從提供的 DataFrame 中:
用于
.reset_index()
從索引中刪除索引列使用
where
, 和.shift
將所有單元格值設(shè)為空白,除了這些值在列Date
和中的第一次出現(xiàn)ConstraintType
。最后,使用
.set_index
將它們放回索引中,這次只有一個未重復的值并寫入to_excel
。現(xiàn)在,merge_cells=True
應(yīng)該工作了。
代碼:
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)
輸出:

TA貢獻1844條經(jīng)驗 獲得超8個贊
在熊貓中,最里面的索引必須標記每一行。因此,必須手動處理最內(nèi)層的索引,如@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,無需設(shè)置 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:
添加回答
舉報