作為一名資料分析小白,並且第一次寫blog,如果有錯,請多多指教。並且**可能太手工了,如果有更高效、簡易的寫法,請指點一下。
先上圖,做成的效果大概就這個樣子,在excel中,如果要做成這種圖,很簡單,就是合併單元格的事。但在python裡面寫,就難倒我了。看完資料後,發現有兩個方向可以做成複雜表頭。①xlsxwriter包;②pandas的multiindex功能。
我用的就是第乙個方法,xlsxwriter。主要幾個技術點:
①單元格合併 - merge_range
②內容填入單元格 - worksheet.writer() / worksheet.writer_column()
③單元格格式 - workbook.add_format() [可設定居中、粗體、斜體、文字大小、顏色、背景等]
此外,按照官方的教程,其實可以用with語句,就可以最後不寫workbook.close()。並且,可以結合pandas一起用。(教程還沒看完,稍後有感覺再補。)
最後,等看完pandas的multiindex後,我再換乙個pandas的寫法吧。
import xlsxwriter
workbook = xlsxwriter.
workbook
('sample.xlsx'
)worksheet = workbook.
add_worksheet
("sheet1"
)worksheet.
set_column
('b:f',19
)worksheet.
set_column
('a:a'
,14.5
)cell_format = workbook.
add_format()
#表頭worksheet.
merge_range
('a1:a2'
,'指標'
,cell_format)
worksheet.
merge_range
('b1:c1'
,'規模'
,cell_format)
worksheet.
merge_range
('d1:f1'
,'增長率'
,cell_format)
worksheet.
write
('b2'
,'1903'
,cell_format)
worksheet.
write
('c2'
,'ytd1903'
,cell_format)
worksheet.
write
('d2'
,'1903 vs. 1902'
,cell_format)
worksheet.
write
('e2'
,'1903 vs. 1803'
,cell_format)
worksheet.
write
('f2'
,'ytd1903 vs. ytd1803'
,cell_format)
#內容df =[[
'銷售額(百萬元)'
,'銷售量(百萬盒)'
,'單價(元/盒)'],
[1,2
,3],
[4,5
,6],
[7,8
,9],
[10,11
,12],
[13,14
,15]]
worksheet.
write_column
('a3'
,df[0]
,cell_format)
worksheet.
write_column
('b3'
,df[1]
,cell_format)
worksheet.
write_column
('c3'
,df[2]
,cell_format)
worksheet.
write_column
('d3'
,df[3]
,cell_format)
worksheet.
write_column
('e3'
,df[4]
,cell_format)
worksheet.
write_column
('f3'
,df[5]
,cell_format)
workbook.
close
()
看了好多文章後發現,單純用pandas,好像沒法直接構建成想要的多級表頭,只能逐個把索引寫出來。(可能有這功能,但我沒找到吧。)
在我的源資料中,規模、銷量是存在的,但同比要計算一次,所以在沒找到方法前,就以只能手寫表頭了。(其實column那裡也可以用pd.multiindex.from_product來簡化**。)
df1 = pd.
dataframe
(np.random.
randint(0
,150
,size=(4
,6))
, index =
list
('東南西北'),
columns=[[
'規模'
,'規模'
,'銷量'
,'銷量'
,'同比'
,'同比'],
['上月'
,'本月'
,'上月'
,'本月'
,'規模'
,'規模']]
);
複雜鍊錶的複製 python編寫
題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 題目分析 1.如果鍊錶為空鍊錶,則返回本身即可 2.如果非空 需要進行複製操作,...
複雜SQL的編寫要領
sql的編碼顯得越來越重要,原因是很多邏輯處理,都可以跟sql掛鉤。個人排斥將邏輯層 複雜化,因此sql在未來的專案架構中,舉足輕重,特地開一章節,來總結一下以往專案中sql的精髓部分。顯示某個店鋪的任務列表,同時把某個使用者的任務完成情況列出來。傳入使用者的id user值,看看該使用者是否完成任...
複雜鍊錶複製
複雜鍊錶複製的標頭檔案mlist.h ifndef mlist h define mlist h include include includetypedef int datatype typedef struct node node,pnode,plist pnode crealist datat...