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

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

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

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

Python 3.x

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

pandas

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

Q&A

解決済

1回答

1465閲覧

グルーピングしたファイルの条件抽出の仕方がわかりません

EIOkawa

総合スコア17

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2019/01/16 01:19

初心者です。
pythonを使用しています。よろしくお願いいたします。

CSVをpandasで読み込み以下のようにグルーピングしました。
df = pd.read_csv("s_0.csv", index_col="date")
df.index = pd.to_datetime(df.index)
grouped = df.groupby(['date','side'])
print(grouped.sum()['size'])

date side    size
2019-01-16 01:04:08.800 BUY 0.674527
2019-01-16 01:04:09.097 SELL 0.030000
2019-01-16 01:04:09.270 SELL 0.051582
2019-01-16 01:04:09.330 SELL 0.020000
2019-01-16 01:04:09.533 SELL 0.013955
2019-01-16 01:04:09.957 BUY 0.027906
2019-01-16 01:04:10.097 SELL 0.010000
2019-01-16 01:04:10.130 SELL 0.062858
2019-01-16 01:04:10.817 BUY 0.027906
2019-01-16 01:04:10.957 SELL 0.020000

以上のデータから例えば1秒ごとのBUYとSELLのsizeの合計を求めたいとき
どのような計算式になるでしょうか。
可能であれば秒数はX = 〇秒のような代入できるにしたいです。
お力添えよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、DataFrame.groupby().sum() を使用する代わりに pandas.pivot_table(aggfunc=np.sum) を使い"BUY"と"SELL"の列を分割した上で各時刻の合計を求めてください。
その後は、DataFrame.resample() を使い1秒毎に集計することで目的の結果が得られるかと思います。

Python

1import pandas as pd 2import numpy as np 3import io 4 5data = """ 6date,side,size 72019-01-16 01:04:08.800,BUY,0.674527 82019-01-16 01:04:09.097,SELL,0.030000 92019-01-16 01:04:09.270,SELL,0.051582 102019-01-16 01:04:09.330,SELL,0.020000 112019-01-16 01:04:09.533,SELL,0.013955 122019-01-16 01:04:09.957,BUY,0.027906 132019-01-16 01:04:10.097,SELL,0.010000 142019-01-16 01:04:10.130,SELL,0.062858 152019-01-16 01:04:10.817,BUY,0.027906 162019-01-16 01:04:10.957,SELL,0.020000 17""" 18df = pd.read_csv(io.StringIO(data), parse_dates=['date']) 19pivot_df = pd.pivot_table(df, index='date', columns='side', values='size', aggfunc=np.sum).fillna(0) 20print(pivot_df) 21#side BUY SELL 22#date 23#2019-01-16 01:04:08.800 0.674527 0.000000 24#2019-01-16 01:04:09.097 0.000000 0.030000 25#2019-01-16 01:04:09.270 0.000000 0.051582 26#2019-01-16 01:04:09.330 0.000000 0.020000 27#2019-01-16 01:04:09.533 0.000000 0.013955 28#2019-01-16 01:04:09.957 0.027906 0.000000 29#2019-01-16 01:04:10.097 0.000000 0.010000 30#2019-01-16 01:04:10.130 0.000000 0.062858 31#2019-01-16 01:04:10.817 0.027906 0.000000 32#2019-01-16 01:04:10.957 0.000000 0.020000 33 34result_df = pivot_df.resample('1s').sum()) 35print(result_df) 36#side BUY SELL 37#date 38#2019-01-16 01:04:08 0.674527 0.000000 39#2019-01-16 01:04:09 0.027906 0.115537 40#2019-01-16 01:04:10 0.027906 0.092858

投稿2019/01/16 01:41

編集2019/01/16 01:44
magichan

総合スコア15898

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

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

EIOkawa

2019/01/16 02:27

ご回答ありがとうございます。 大変助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問