我有一個像這樣的資料框
dfDictionary = {'Results':['Home',
'Away',
'For',
'Against'
],
'info':[ '-', '-','-','-',],
'rating':[ '-', '-','-','-',],
'review':[ '-', '-','-','-',]}
dfTable1 = pd.DataFrame(dfDictionary)
它看起來像下面
Results info rating review
0 Home - - -
1 Away - - -
2 For - - -
3 Against - - -
我像這樣從這個df創建了一個MultiIndex資料框dfTable1.index =pd.MultiIndex.from_product([[f'Summary1'], dfTable1.Results])
現在資料框如下所示。如您所見,該Results列在索引和列中。我不再想要該列,因為它在索引中,我該怎么做dropping?我問“沒有dropping”,因為我不希望列中有 2 個級別。
Results info rating review
Results
Summary1 Home Home - - -
Away Away - - -
For For - - -
Against Against - - -
我有另一個幾乎完全相同的df
dfTable2 = pd.DataFrame(dfDictionary)
dfTable2.index =pd.MultiIndex.from_product([[f'Summary2'], dfTable1.Results])
最終我想將它們與resultsTable = pd.concat([dfTable1, dfTable2], axis = 0)
現在我得到一個如下圖所示的資料框

我最終想要實作的是像下面這樣帶有一header列的 df,我會用resultsTable.columns =pd.MultiIndex.from_product([[f'Final Consolidated Table'], resultsTable.columns]). 但在此之前,我需要對我目前遇到的問題進行分類。

更新
使用@jezrael 提供的初始解決方案,在連接兩個資料幀后,我能夠獲得如下所示的 df。

有沒有辦法得到如下的資料框?基本上我正在嘗試重新創建一個類似于 excel 表的 pandas df。如果這是可能的,那就太好了。

uj5u.com熱心網友回復:
concat與 convert Resultsto index by 字典一起用于第一級Summary1:
dfTable1 = pd.DataFrame(dfDictionary)
dfTable1 = pd.concat({'Summary1':dfTable1.set_index('Results')})
print (dfTable1)
info rating review
Results
Summary1 Home - - -
Away - - -
For - - -
Against - - -
您的解決方案DataFrame.pop用于使用和丟棄Results:
dfTable1.index = pd.MultiIndex.from_product([[f'Summary1'], dfTable1.pop('Results')])
print (dfTable1)
info rating review
Results
Summary1 Home - - -
Away - - -
For - - -
Against - - -
像被洗掉一樣作業drop:
dfTable1.index = pd.MultiIndex.from_product([[f'Summary1'], dfTable1.Results])
dfTable1 = dfTable1.drop('Results', axis=1)
print (dfTable1)
info rating review
Results
Summary1 Home - - -
Away - - -
For - - -
Against - - -
編輯:
dfDictionary = {'Results':['Home',
'Away',
'For',
'Against'
],
'info':[ '-', '-','-','-',],
'rating':[ '-', '-','-','-',],
'review':[ '-', '-','-','-',]}
dfTable1 = pd.DataFrame(dfDictionary)
dfTable2 = pd.DataFrame(dfDictionary)
dfTable1 = pd.concat({'Summary1':dfTable1.set_index('Results')})
dfTable2 = pd.concat({'Summary2':dfTable2.set_index('Results')})
resultsTable = pd.concat([dfTable1, dfTable2])
對于預期的輸出,必須從列名稱創建幫助程式 DataFrame,對于合并的單元格,Results創建 3 個級別MultiIndex。
然后分別寫第一個標題和沒有列名的資料:
d = {'level_0':'Results'}
header = resultsTable.reset_index().columns.to_frame().rename(index=d).replace({0:d})
header = pd.concat({'Final Consolidated Table':header.set_index(0, append=True)}).T.rename_axis([None, None, None], axis=1)
resultsTable = resultsTable.rename_axis([None, None])
with pd.ExcelWriter('output.xlsx') as writer:
header.to_excel(writer, startcol=-1)
resultsTable.to_excel(writer, startrow=2, header=None)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/493220.html
下一篇:計算部分資料框的標準差
