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

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

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

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

pandas

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

Q&A

解決済

2回答

488閲覧

groupbyで変形したDataFrameのインデックスのフォーマットを変えたい

s_diff

総合スコア107

Python

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

pandas

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

0グッド

0クリップ

投稿2019/06/15 07:13

編集2019/06/15 07:18

pandasのDataFrameを年と月でgroupbyしsizeメソッドを使って以下のようなrequest_data_groupを作成しました。

python

1request_data = pd.read_csv('company_data/request_data.csv', 2 index_col='created_at', 3 parse_dates=True) 4 5request_data_group = request_data.groupby([request_data.index.year, request_data.index.month]).size() 6request_data_group = request_data_group.astype('float32') 7request_data_group.index

出力:

MultiIndex(levels=[[2018, 2019], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]],

labels=[[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], [5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5]], names=['created_at', 'created_at'])

python

1request_data_group.values

出力:

array([ 110., 111., 102., 103., 138., 168., 126., 142., 160.,

132., 134., 160., 57.], dtype=float32)

python

1request_data_group

出力:

created_at created_at

2018 6 110.0
---------------7 111.0
---------------8 102.0
---------------9 103.0
---------------10 138.0
---------------11 168.0
---------------12 126.0
2019 1 142.0
---------------2 160.0
---------------3 132.0
---------------4 134.0
---------------5 160.0
---------------6 57.0
dtype: float32

これを、以下のようなフォーマットにしたいです。

Month

2018-06-01 110.0
2018-07-01 111.0
2018-08-01 102.0
2018-09-01 103.0
2018-10-01 138.0
Name: #Passengers, dtype: float64

どのようにすればできるでしょうか。

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

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

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

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

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

m.ts10806

2019/06/15 07:17

回答依頼いただいて申し訳ないのですが、Python自体ほとんど触ったことがないので、別の方に振っていただきたく。
s_diff

2019/06/15 07:18

申し訳ありません。承知いたしました
hayataka2049

2019/06/15 08:22

可能ならrequest_data.csvの中身をテキストとして提示していただけると回答しやすいです。全データ、実データでなくても構いませんが、状況を再現できる程度のものを。
s_diff

2019/06/18 00:05

ありがとうございます。次回からはご指摘のように状況を再現できるデータを記載します。
guest

回答2

0

ベストアンサー

Python

1request_data_group = request_data.groupby([request_data.index.year, request_data.index.month]).size()

の部分をpandas.Grouper()を使って

Python

1request_data_group = request_data.groupby(pd.Grouper(freq='MS')).size()

とすると良いかと思います。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Grouper.html

一応サンプル

Python

1import pandas as pd 2import numpy as np 3 4N=600 5request_data = pd.DataFrame( 6 {'value':np.random.randint(0,100,N)}, 7 index=pd.date_range('2018/1/1', freq='1d', periods=N)) 8request_data_group = request_data.groupby(pd.Grouper(freq='MS')).size() 9request_data_group = request_data_group.astype('float32') 10print(request_data_group) 11#2018-01-01 31.0 12#2018-02-01 28.0 13#2018-03-01 31.0 14#2018-04-01 30.0 15#2018-05-01 31.0 16#2018-06-01 30.0 17#2018-07-01 31.0 18#2018-08-01 31.0 19#2018-09-01 30.0 20#2018-10-01 31.0 21#2018-11-01 30.0 22#2018-12-01 31.0 23#2019-01-01 31.0 24#2019-02-01 28.0 25#2019-03-01 31.0 26#2019-04-01 30.0 27#2019-05-01 31.0 28#2019-06-01 30.0 29#2019-07-01 31.0 30#2019-08-01 23.0

"""

投稿2019/06/15 08:56

magichan

総合スコア15898

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

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

s_diff

2019/06/18 00:11

とても便利なメソッドを教えて頂きありがとうございます!
guest

0

python

1request_data["MS"] = request_data.index.snap("MS")

などとして適当にgroupbyで使う基準を先に作っておき、それに基づいてグルーピングするのがスマートではないでしょうか。

投稿2019/06/15 08:33

hayataka2049

総合スコア30933

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

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

s_diff

2019/06/18 00:11

なるほど、勉強になりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問