df.reset_index(drop=False)
してもデータが変?
pivot_table
でそれっぽい形になるがカラム名が変。- エクスポートした時の空白を消して csv のような形にしたい
整形前のデータ (test)
category | cnt | dept | item | ymd |
---|---|---|---|---|
A | 12 | 100100 | 100 | 2 |
B | 3 | 100200 | 200 | 2 |
A | 4 | 100100 | 200 | 3 |
C | 30 | 100200 | 300 | 4 |
理想
- category の要素{A,B,C}を列に持ってきてcntを格納。
- NaN は 0 で置換
ymd | dept | item | A | B | C |
---|---|---|---|---|---|
2 | 100100 | 100 | 12 | 0 | 0 |
2 | 100200 | 200 | 0 | 3 | 0 |
3 | 100100 | 200 | 4 | 0 | 0 |
4 | 100200 | 300 | 0 | 0 | 30 |
python
1ymd 4 non-null object 2item 4 non-null object 3A 4 non-null float64 4B 4 non-null float64 5C 4 non-null float64
現実
- なんかズレてる
- カラム名が変?
ymd | item | cnt | cnt | cnt | |
---|---|---|---|---|---|
category | A | B | C | ||
0 | 2 | 100 | 12 | 0 | 0 |
1 | 2 | 200 | 0 | 3 | 0 |
2 | 3 | 200 | 4 | 0 | 0 |
3 | 4 | 300 | 0 | 0 | 30 |
python
1(ymd, ) 4 non-null object 2(item, ) 4 non-null object 3(cnt, A) 4 non-null float64 4(cnt, B) 4 non-null float64 5(cnt, C) 4 non-null float64
ソース
python
1# データの作成 2test = pd.DataFrame(data={'ymd':['2','2','3','4'], 3 'category':['A','B','A','C'], 4 'dept':['100100','100200','100100','100200'], 5 'item':['100','200','200','300'], 6 'cnt':[12,3,4,30] 7 }) 8# group by で集計 9test2=test.groupby(['ymd','category','dept','item'])['cnt'].sum() 10 11# Dataframe 型に変換して、MultiIndex を解除 12test3 = pd.DataFrame(test2).reset_index(drop=False) 13 14# category を列に移動、NaN を 1で置換 15test4=test.pivot_table(values=['cnt'], 16 index=['ymd','item'], 17 columns='category', 18 aggfunc='sum').fillna(0) 19 20# MultiIndex 解除 21test4.reset_index(drop=True)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/25 02:47
2017/09/25 03:24
2017/09/25 04:46