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

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

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

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

pandas

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

Q&A

1回答

520閲覧

PandasのDataFrameを用いて、合計値・平均値を算出したい

K_mori

総合スコア10

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2019/01/22 05:44

編集2019/01/22 08:38

前提・実現したいこと

現在、PythonのPandasを使用してデータ処理の勉強をしています。
DataFrameのindexをDATETIME(日時)に設定したとき、遡って合計値・平均値を算出したいです。

発生しているエラー

2019-01-21 8:00:00.437313 Traceback (most recent call last): File "backtest.py", line 29, in <module> print(self.f[index-10 : index]) File "pandas\_libs\tslibs\timestamps.pyx", line 298, in pandas._libs.tslibs.timestamps._Timestamp.__sub__ File "pandas\_libs\tslibs\timestamps.pyx", line 269, in pandas._libs.tslibs.timestamps._Timestamp.__add__ ValueError: Cannot add integral value to Timestamp without freq.

該当のソースコード

読み込むCSV

DATETIME,TIMESTAMP,A,B,C 2019-01-21 07:00:01.147163,1548021601.1471784,386008.0,0.01,1.05635978 2019-01-21 07:00:02.503894,1548021602.50391,386010.0,0.541,0.9697999999999999 2019-01-21 07:00:03.892234,1548021603.8922503,385986.0,0.03,0.03 2019-01-21 07:00:05.273867,1548021605.2738833,385992.0,0.01,0.28939992 2019-01-21 07:00:06.639722,1548021606.6397378,385997.0,0.01,0.57442164 2019-01-21 07:00:07.960864,1548021607.9608808,385997.0,0.41000000000000003 2019-01-21 07:00:09.457629,1548021609.457645,386032.0,1.6560718500000002 2019-01-21 07:00:10.816018,1548021610.8160346,386030.0,0.01,0.3012241 (中略) 2019-01-21 11:00:51.066049,1548036051.0660646,385504.0,0.41000000000000003,0.066 2019-01-21 11:00:52.389939,1548036052.3899548,385503.0,0.8,0.030100000000000002 2019-01-21 11:00:53.747384,1548036053.7473993,385488.0,0.13912297,0.32 2019-01-21 11:00:55.078652,1548036055.0786674,385479.0,0,0.113317 2019-01-21 11:00:56.451129,1548036056.4511445,385477.0,0.34800000000000003,0.57 2019-01-21 11:00:57.791441,1548036057.7914567,385475.0,0,0.05 2019-01-21 11:00:59.187676,1548036059.1876915,385475.0,0,0.01

Python3

1import pandas as pd 2 3#データ取得期間指定期間指定(yyyy-mm-dd hh:mm:ss) 4fro = '2019-1-21 8:00' 5to = '2019-1-21 9:00' 6 7def search_record(): 8 9 #csv読み込み 10 f = pd.read_csv('test.txt') 11 12 #DATETIMEの列をTimestamp型に変換して代入 13 f['DATETIME'] = pd.to_datetime(f['DATETIME']) 14 #DATETIMEをインデックスに設定 15 f.set_index('DATETIME', inplace = True) 16 17 #全カラム抜き出し 18 df = f[fro : to] 19 20if __name__ == '__main__': 21 #指定期間のデータ抜出 22 search_record() 23 24 #抜き出したデータを一行ごとに処理するためループにかける 25 for index, row in df.iterrows(): 26 #現在のindexから10行上までのレコードのB列の合計・平均をどうにかして出したい 27 print(f[index-10 : index])

現在のindexから10行遡った分のB列の・合計・平均を算出するには、どのようにすればよろしいでしょうか。

補足情報(FW/ツールのバージョンなど)

AWS Cloud9
Python 3.7.0

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

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

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

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

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

can110

2019/01/22 08:34

CSVデータにおいて、中略前後で列数が異なっていたり、ソースコードもdf未定義エラーになるなど 提示された内容だと検証できません。 検証可能なCSVデータ、コードを提示くださると回答得られやすくなります。
K_mori

2019/01/22 08:39

御指摘ありがとうございます。 載せれない場所をカットした都合で正しいものを提示できておりませんでした。 再度確認・修正させて頂きます。
can110

2019/01/22 09:16

依然としてコードはdf未定義エラーなどが発生します…
guest

回答1

0

pandas.Series.rollingを使ってはいかがでしょうか?
参考:pandasで窓関数を適用するrollingを使って移動平均などを算出
以下サンプルコードです。

Python

1import pandas as pd 2 3df = pd.DataFrame({'B':range(15)}) 4df['Sum'] = df['B'].rolling(window=10).sum() 5df['Ave'] = df['B'].rolling(window=10).mean() 6print(df) 7""" 8 B Sum Ave 90 0 NaN NaN 101 1 NaN NaN 112 2 NaN NaN 123 3 NaN NaN 134 4 NaN NaN 145 5 NaN NaN 156 6 NaN NaN 167 7 NaN NaN 178 8 NaN NaN 189 9 45.0 4.5 1910 10 55.0 5.5 2011 11 65.0 6.5 2112 12 75.0 7.5 2213 13 85.0 8.5 2314 14 95.0 9.5 24"""

投稿2019/01/22 09:19

can110

総合スコア38266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問