2017-08-16 5 views
1

ここでの目標は、列ヘッダーの上にあるPythonを通じて動的にデータフレーム内の特定の列にSUM値を追加することです。 SUM値を作成することはできますが、Excelにエクスポートした後はヘッダーの上に置くことはできません。どのようにPythonでこれを行うための任意のアイデア?私はxlrd、openpyxlなどを試しましたが、私はVBAマクロを呼び出すことに悩まされていません。誰もそれをやりたくはありません。私は47列あり、それらのいくつかを集計しているだけです。また、Openpyxlを使ってデフォルトのPandas Indexカラムを削除するなど、あとでデータをフォーマットするためにもっと多くのことをやっています。上記のシリーズを追加データフレームの列ヘッダーPythonでパンダを使用する

df = pd.read_sql(sqlStatement,cnxn_SQL) 
row_sum = df[['GROSS ACRES', 'Value']].sum() 
df_sum = pd.DataFrame(data=row_sum).T 
df_concat_sum = df_sum 
row = pd.Series(row_sum) 
df_sum = df_sum.reindex(columns=df.columns) 
df_sum = pd.DataFrame(columns = df_sum.columns) 
newdf=df_sum.append(df,ignore_index=True).append([row], ignore_index=True) 
writer = pd.ExcelWriter(standlisterxlsx, engine ='xlsxwriter') 
newdf.to_excel(writer,'Sheet1') 
workbook = writer.book 
worksheet = writer.sheets['Sheet1'] 
writer.save() 
writer.close() 

私はこのようにしてエクスポートされたスプレッドシートを必要とする:

     20    100 
Column1 Column2 Column3 ACRES Column5 Value 
ID1  x  e  13 n   40 
ID2  d  e  7  n   20 
ID3  d  e  0  n   40 

私は、Windows 8、32ビットでPython 2.7とパンダバージョン0.13.1を使用しています。

+0

openpyxlの 'dataframe_to_rows'ユーティリティを使用してみてください。 –

答えて

0

あなたはsumMultiIndex.from_arraysを試すことができます。

#columns for sums 
cols = ['ACRES','Value'] 
df1 = df[cols].sum().to_frame('sum').T.reindex(columns=df.columns, fill_value='') 
print (df1) 
    Column1 Column2 Column3 ACRES Column5 Value 
sum        20   100 

mux = pd.MultiIndex.from_arrays([df1.iloc[0], df.columns], names=(None, None)) 
df.columns = mux 
print (df) 
          20   100 
    Column1 Column2 Column3 ACRES Column5 Value 
0  ID1  x  e 13  n 40 
1  ID2  d  e  7  n 20 
2  ID3  d  e  0  n 40 

df.to_excel('file.xlsx', 'Sheet1') 
+0

エクスポートのdf.to_excel部分でエラーが発生します。クイック検索では、この機能が利用できない場合があります。または、私は新しいパンダのバージョンが必要ですか? Traceback(直近の最後のコール): AttributeError: 'MultiIndex'オブジェクトに 'to_excel'属性がありません –

+0

'pandas 0.20.3'バージョンを使用しています – jezrael

+0

おそらく' df.columns = mux' - it Multiindexを作成します。 'mux.to_excel()'は必要ありません – jezrael

関連する問題