質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

263閲覧

Python:CSVにあるトランザクションレコードを月別に纏めたい

kumer1

総合スコア26

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/01/08 05:33

###前提・実現したいこと
下記のようなCSVにあるトランザクションのレコードを月別に並べ替え、2次元(?)の表を作成したいです。宜しくお願い致します。

・test.csv(元のデータ)
Id,Month,Country,Count,Sales,Share
3310-15,17年4月,アメリカ,25,50,15
3310-15,17年4月,カナダ,5,10,3
3310-15,17年5月,アメリカ,50,100,30
3310-15,17年5月,カナダ,15,30,9
3310-15,17年6月,アメリカ,20,40,12
3310-15,17年6月,イギリス,10,20,6
3310-28,17年4月,アメリカ,5,10,3
3310-28,17年6月,イギリス,5,10,3
3310-30,17年5月,アメリカ,5,10,3
3310-30,17年5月,カナダ,5,10,3

・by_month.csv(完成形の表)
Id,17年4月,17年5月,17年6月
3310-15,30,65,30
3310-28,5,0,5
3310-30,0,10,0

・Countryは無視する
・Countの値のみ取得する

###発生している問題
・Idでグルーピングは出来たが、月別が消えてしまう
・先頭に0,1,2と付いてしまう
・横に月別にする方法が発見できなかった
・Idに対して無いレコードを表示できない
(ex:3310-30の17年4月のレコードはCount数が0なので元データには無いが、完成形には0としたい)
・Countの値のみ抽出できなかった

###該当のソースコード
import pandas as pd

df = pd.read_csv('test.csv')
df_gp = df.groupby('Id', as_index=None).sum()
df_gp.to_csv('by_month.csv', index=None)

###試したこと
サーチしたが知識不足でこれ以上がどうにも記述できなかったです。

###補足情報(言語/FW/ツール等のバージョンなど)
Mac OS High Sierra 10.13.2
Python 3.6.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

クロス集計表を作成する関数を使ってはいかがでしょうか?

python

1pd.pivot_table(index='Id',columns='Month',values='Count',data=df,aggfunc='sum') 2

クロスした部分にデータがない場合、Nanが設定されるのでfillna(0)でゼロ埋めする必要があります。

投稿2018/01/08 10:03

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumer1

2018/01/08 16:15

pivot_table()はイメージが掴みやすかったです。練習すると色々と使えて便利そうです。ありがとうございました。 import pandas as pd df = pd.read_csv('test.csv') pv = pd.pivot_table(data=df, values='Count', columns='Month', index='Id', aggfunc='sum', fill_value=0) pv.to_csv('by_month.csv')
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問