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

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

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

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

pandas

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

Q&A

解決済

2回答

762閲覧

DataFrameで、30行ごとに平均を出したい

yama0309

総合スコア15

Python

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

pandas

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

0グッド

0クリップ

投稿2021/12/27 09:27

前提・実現したいこと

DataFrameで、30行ごとに平均を出したいです。
より正確には、1分あたりの数値が記録されているdataframeで、30分ごとの平均値を求めたいです。

該当のソースコード

python

1 2import pandas as pd 3import random 4 5df = pd.DataFrame([random.randint(10,30) for i in range(90)],index=pd.date_range(start='2021/8/1',periods=90,freq='T'),columns=['data']) 6 7data 82021-08-01 00:00:00 25 92021-08-01 00:01:00 28 102021-08-01 00:02:00 18 112021-08-01 00:03:00 30 122021-08-01 00:04:00 25 13... ... 142021-08-01 01:25:00 10 152021-08-01 01:26:00 22 162021-08-01 01:27:00 13 172021-08-01 01:28:00 16 182021-08-01 01:29:00 25

試したこと

30行ごとに分割してdf.mean()を繰り返そうかと思いましたが、そのデータを再びdataframeに戻す方法がわかりませんでした。
そもそも、分割せずとも平均を出すことができるのではないかと思い質問するに至りました。
よろしくお願いいたします。

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

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

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

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

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

meg_

2021/12/27 10:00

> 30行ごとに分割してdf.mean()を繰り返そうかと思いましたが、そのデータを再びdataframeに戻す方法がわかりませんでした。 それはどのようなコードでしょうか?質問に追記いただけませんか?
guest

回答2

0

以下です。

python

1>>> import pandas as pd 2>>> import random 3>>> 4>>> df = pd.DataFrame([random.randint(10,30) for i in range(90)],index=pd.date_range(start='2021/8/1',periods=90,freq='T'),columns=['data']) 5>>> 6>>> df2 = df.reset_index() 7>>> 8>>> def f(df): 9... m = df.head(1) 10... m.iat[0,1] = df.iloc[:,1:2].mean()[0] 11... return m 12... 13>>> df3 = df2.groupby(df2.index//30).apply(f) 14>>> print(df3) 15 index data 160 0 2021-08-01 00:00:00 20.800000 171 30 2021-08-01 00:30:00 18.866667 182 60 2021-08-01 01:00:00 18.000000

投稿2021/12/27 10:11

ppaul

総合スコア24670

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

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

0

ベストアンサー

python

1import pandas as pd 2import random 3 4df = pd.DataFrame([random.randint(10,30) for i in range(90)],index=pd.date_range(start='2021/8/1',periods=90,freq='T'),columns=['data']) 5 6print(df.groupby(df.index.floor('30min')).mean()) 7 8# 9 data 102021-08-01 00:00:00 21.766667 112021-08-01 00:30:00 19.966667 122021-08-01 01:00:00 19.900000

投稿2021/12/27 10:09

melian

総合スコア20655

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

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

yama0309

2021/12/27 13:02

groupbyとfloorを使えば実装できたのですね。floorというものを知らなかったので、その点も勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問