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

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

新規登録して質問してみよう
ただいま回答率
85.50%
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回答

3748閲覧

pandasでn秒ごとにデータをまとめて列ごとに処理

ramin

総合スコア34

Python 3.x

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

Python

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

pandas

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

0グッド

0クリップ

投稿2020/06/09 10:31

pandasで時系列データをもとに、n秒ごとに行をまとめてそのまとめた行の列ごとに別々の処理を行いたいのですが、良い方法あるでしょうか?
例えばこの例のようなデータに対して3秒ごとにまとめ、priceは3秒内の最大値を求め、amountは3秒間の総和を求めるということがしたいです。
str_dateはインデックスではなく、指定していません。カラム名はstr_date, price, amountです。

str_datepriceamount
"2020-06-01 00:00:00"1000.1
"2020-06-01 00:00:01"4000.2
"2020-06-01 00:00:02"3000.3
"2020-06-01 00:00:05"2000.4
"2020-06-01 00:00:07"9000.5
"2020-06-01 00:00:12"7000.6
"2020-06-01 00:00:13"8000.7
"2020-06-01 00:00:14"9000.8

・3秒でサンプリング

str_datepriceamount
"2020-06-01 00:00:00"4000.6
"2020-06-01 00:00:03"2000.4
"2020-06-01 00:00:06"9000.5
"2020-06-01 00:00:09"NaNNaN
"2020-06-01 00:00:12"9002.1

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

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

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

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

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

y_waiwai

2020/06/09 10:41

なにをききたいんでしょうか 時間の判定?それとも最大値を求める方法?あるいは積算する方法?
guest

回答2

0

まとめた行を作ったあとに、列に対して処理を適用したい場合なら、apply()を使えば編集ができますよ。意図した答えになっているでしょうか。

python3

1 2df = df['amount'].apply(get_amount) 3 4def get_amount(amount) 5 return amount * 10 6

投稿2020/06/11 01:36

zenji0705

総合スコア69

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

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

0

ベストアンサー

データがない区間のamountの総和がNaNにはできませんでしたが、それを除けば下記のコードで行けます。

python

1import numpy as np 2import pandas as pd 3 4df = pd.DataFrame( 5 { 6 "str_date": [ 7 "2020-06-01 00:00:00", 8 "2020-06-01 00:00:01", 9 "2020-06-01 00:00:02", 10 "2020-06-01 00:00:05", 11 "2020-06-01 00:00:07", 12 "2020-06-01 00:00:12", 13 "2020-06-01 00:00:13", 14 "2020-06-01 00:00:14", 15 ], 16 "price": [100, 400, 300, 200, 900, 700, 800, 900], 17 "amount": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8], 18 } 19) 20print(df) 21 22# インデックスをstr_dateをDatetimeIndex型のインデックス 23df.index = pd.DatetimeIndex( 24 pd.to_datetime(df.str_date, format="%Y-%m-%d %H:%M:%S") 25) 26df.index.name = "date" 27 28# リサンプリング 29df_3sec = df.resample("3S").agg({"price": np.max, "amount": np.sum}) 30print(df_3sec)

結果は以下の通りです。

terminal

1$ python resample_test.py 2 str_date price amount 30 2020-06-01 00:00:00 100 0.1 41 2020-06-01 00:00:01 400 0.2 52 2020-06-01 00:00:02 300 0.3 63 2020-06-01 00:00:05 200 0.4 74 2020-06-01 00:00:07 900 0.5 85 2020-06-01 00:00:12 700 0.6 96 2020-06-01 00:00:13 800 0.7 107 2020-06-01 00:00:14 900 0.8 11 price amount 12date 132020-06-01 00:00:00 400.0 0.6 142020-06-01 00:00:03 200.0 0.4 152020-06-01 00:00:06 900.0 0.5 162020-06-01 00:00:09 NaN 0.0 172020-06-01 00:00:12 900.0 2.1

投稿2020/06/11 00:09

yymmt

総合スコア1615

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問