2017-09-11 10 views
1

私はPythonには新しく、Pandas/XlsWriterに私がしたいことをさせるために私の髪を引き出しています。Python:行と列の小計を簡単に取得するにはどうすればよいですか?

データフレームにロードして操作したCSVのデータセットから始めました。最終的にPIVOTを実行した後、私は以下のようなデータを得ました。強調表示されたPINKは、私がPandas/XLSwriterがプログラム的に制作しようとしていることを表しています。行と列の数は可変になります。

つの質問:

1)私は、行と列ごとの小計を見つけることができる方法を教えてください?

2)数字の書式を適用してxxx、xxx、xxx.00にするにはどうすればよいですか?

ボーナスQUESTION:

あなたはなぜXLSWriter(またはその逆)と上OpenPYXLを勧めますか?

enter image description here

答えて

0
df["Daily Total"] = df["Company A"] + df["Company B"] + df["Company C"]+ df["Company D"] 
+0

「そう数:インデックスでない場合には、あなたが行うことができ、

df[col] = df[col].map('{:,.2f}'.format) 

または日付/相手の列ではありませんすべてをフォーマットします行と列の変数が変更されます。あなたの答えは、列数または列名の可変数に対応していません。 – jack6e

1

これは主に、重複する質問です:あなたはドキュメントあたりdf.sum()を探しているPandas: sum DataFrame rows for given columns

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sum.htmlそれは次のようになり、あなたの特定のケースについては

# New column with row totals 
df['Daily Total'] = df.sum(axis=1, numeric_only=True) 
# New row with column totals 
df = df.append(df.sum(numeric_only=True), ignore_index=True) 

フォーマットだけである:彼は具体的に述べ

df = df.apply(lambda col: col.map('{:,.2f}'.format) if col.name != 'Counterparty' else col) 
+0

応答に感謝します。新しい列の追加は完全に機能します。列の合計を持つ新しい行を追加することは問題です。その核は私の日付インデックスの列です。 appendには "ignore_index"が必要ですが、これは私のテーブルの日付カラムを失います(一般的な数値インデックスに置き換えられます)。私は回避策について考えましたが、構文に問題がありました。私は現在の日付ベースのインデックスを取得し、それをデータフレームのFRONTに追加しようとしています。次に、あなたのコードを実行することができ、成熟期日が最初の列になります(インデックスを無視して) – Hiro

+0

その解決策は 'df = df.reset_index()'です。 – jack6e

関連する問題