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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

750閲覧

pandas の MultiIndex を csv のようなテーブルに変換する方法について

tf23yh8df3

総合スコア60

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2017/09/25 01:41

df.reset_index(drop=False)してもデータが変?

  • pivot_table でそれっぽい形になるがカラム名が変。
  • エクスポートした時の空白を消して csv のような形にしたい

整形前のデータ (test)

categorycntdeptitemymd
A121001001002
B31002002002
A41001002003
C301002003004

理想

  • category の要素{A,B,C}を列に持ってきてcntを格納。
  • NaN は 0 で置換
ymddeptitemABC
21001001001200
2100200200030
3100100200400
41002003000030

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

現実

  • なんかズレてる
  • カラム名が変?
ymditemcntcntcnt
categoryABC
021001200
12200030
23200400
343000030

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)

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

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

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

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

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

guest

回答2

0

集計している部分がなかったので、category列ごとに機械的に入れてしまう方法もありそうです。

python

1test2 = test.copy() 2test2.index = test2[['dept', 'item']].apply( 3 lambda x: '{}{}'.format(*x), axis=1) 4 5for category in test2['category'].unique(): 6 test2[category] = test2.loc[test2['category'] == category, 'cnt'] 7 8test2.reset_index(inplace=True) 9test2.drop(['index', 'category', 'cnt'], axis=1, inplace=True) 10test2.fillna(0, inplace=True)

投稿2017/09/25 02:11

driller

総合スコア720

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

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

tf23yh8df3

2017/09/25 02:47

ありがとうございます。 期待通りの結果を確認できました。 実際のデータは ymd と、item と dept で集計しています。 dept と item を index にしているのはどうしてですか。
driller

2017/09/25 03:24

データを代入するに当たって一意の index が欲しかったため、dept と item をつなげて index としましたが、MultiIndex でも構わないと思います。
tf23yh8df3

2017/09/25 04:46

なるほど。 test.cnt が A~C列のデータだったのでそれと必要なカラムを連結する方法もありました。
guest

0

自己解決

解決手段

python

1test5 = test.cnt 2pd.concat([test.ymd, test.item, test5], axis=1)

投稿2017/09/25 04:44

tf23yh8df3

総合スコア60

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問