dfs = [d1, d2, d3]
df_combined = pd.concat(
[df.rename(columns=lambda x: x.zfill(4)) for df in dfs],
keys=['HEADER TITLE{}'.format(i) for i in range(1, len(dfs) + 1)],
axis=1
)
df_combined

and for csv
print(df_combined.to_csv())
,HEADER TITLE1,HEADER TITLE1,HEADER TITLE1,HEADER TITLE1,HEADER TITLE1,HEADER TITLE2,HEADER TITLE2,HEADER TITLE2,HEADER TITLE2,HEADER TITLE2,HEADER TITLE3,HEADER TITLE3,HEADER TITLE3,HEADER TITLE3,HEADER TITLE3
,0000,0100,0200,0300,0400,0000,0100,0200,0300,0400,0000,0100,0200,0300,0400
03/06/2017,0.0,0.1,0.2,0.4,0.6,ND,ND,ND,ND,ND,0.2,0.5,1.0,0.3,ND
03/07/2017,1.1,4.4,1.0,ND,4.3,4.3,4.2,4.3,ND,4.3,4.3,1.1,4.3,ND,4.3
However, since @StephenRauch pointed out ... what you want is not really csv ... so let non-csv!
with pd.option_context('display.width', 1000):
print(df_combined.__repr__())
HEADER TITLE1 HEADER TITLE2 HEADER TITLE3
0000 0100 0200 0300 0400 0000 0100 0200 0300 0400 0000 0100 0200 0300 0400
03/06/2017 0.0 0.1 0.2 0.4 0.6 ND ND ND ND ND 0.2 0.5 1.0 0.3 ND
03/07/2017 1.1 4.4 1.0 ND 4.3 4.3 4.2 4.3 ND 4.3 4.3 1.1 4.3 ND 4.3