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

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

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

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

pandas

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

Q&A

解決済

1回答

1367閲覧

Pandas ログ解析時系列データで毎時(分)のアイテム別出現頻度カウント

minhouse10

総合スコア41

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2017/12/07 15:41

Pandasのデータフレームで以下のようなデータがあります。指定した時間頻度で毎時、毎分、毎秒など集計はする事はできるのですが、Infoの各要素毎の出現カウントを指定した時間頻度で集計するにはどうすればよいでしょうか? Grouper, resample, aggなどを組み合わせる事で実現できそうではあるのですが、苦戦しております。ご教授の程よろしくお願いいたします。

データフレーム:df_2

Date Info 
2017-12-02 20:00:10.214937 Failure
2017-12-02 20:00:10.324322 Request,
2017-12-02 20:00:10.480982 Response,
2017-12-02 20:00:10.490494 Response,
2017-12-02 20:00:10.519340 Failure


df_2 = df_2.groupby(['Info', pd.Grouper(level=0, freq='h')]).count()
によって以下の様な形にはなりましたが、時間別のカウントは表示する事ができません。

Failure 2017-12-02 20:00:00
2017-12-02 21:00:00
2017-12-02 22:00:00
2017-12-02 23:00:00
2017-12-03 00:00:00
Request,2017-12-02 20:00:00
2017-12-02 21:00:00
2017-12-02 22:00:00
2017-12-02 23:00:00
2017-12-03 00:00:00
Response,2017-12-02 20:00:00
2017-12-02 21:00:00
2017-12-02 22:00:00
2017-12-02 23:00:00
2017-12-03 00:00:00
Success 2017-12-02 20:00:00
2017-12-02 21:00:00
2017-12-02 22:00:00
2017-12-02 23:00:00


以下の様な結果になれば更に見やすく理想です。
Failure Request, Response, Success
2017-12-02 20:00:00 3 3     1     4
2017-12-02 21:00:00 2 2     2     2
2017-12-02 22:00:00 2 5     3     1
2017-12-02 23:00:00 1 3     4     2
2017-12-03 00:00:00 1 2     5     1

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

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

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

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

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

guest

回答1

0

ベストアンサー

Infoの各要素毎の出現カウントは value_counts() を使うと良いかと思います。

Python

1import pandas as pd 2import numpy as np 3 4# ダミーデータ生成 5N=50 6df = pd.DataFrame({ 7 'Date':pd.date_range('2017/12/02 20:00', freq='5min', periods=N), 8 'Info':np.random.choice(['Request','Response','Failure'],N) 9}) 10df = df.set_index('Date') 11 12# 1時間毎に集計 13ret = df.groupby(pd.Grouper(level=0, freq='h'))['Info'].value_counts().unstack(fill_value=0) 14 15print(ret) 16# Info Failure Request Response 17# Date 18# 2017-12-02 20:00:00 2 5 5 19# 2017-12-02 21:00:00 6 5 1 20# 2017-12-02 22:00:00 6 4 2 21# 2017-12-02 23:00:00 4 4 4 22# 2017-12-03 00:00:00 1 1 0

投稿2017/12/07 23:55

magichan

総合スコア15898

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

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

minhouse10

2017/12/08 02:22

magichan様、いつもご教授頂きありがとうございます! アドバイスに従い実行した結果、完璧な結果が得られました。value_counts()は利用を試みたのですが、Dataframeにvalue_countsは使えないというようなエラーが出まして、Seriesにしないとだめなのかなと思っておりました。本当にありがとうございました。 Info Failure Request, Response, Success Date 2017-12-02 20:00:00 21339 8960 7029 105 2017-12-02 21:00:00 21584 9089 7125 128 2017-12-02 22:00:00 21087 8672 6873 60 2017-12-02 23:00:00 19441 8333 6701 77 2017-12-03 00:00:00 54 24 18 0
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問