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

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

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

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

Python

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

Q&A

1回答

2228閲覧

1秒値を1分値に(いらない数値は0にして平均値の分母にはカウントしない)

wpspring0300

総合スコア11

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/06/18 05:52

編集2022/01/12 10:55

前提・実現したいこと

1秒値を1分値にしたいので、60データ当たりの平均をとりたいのですが、データの中には条件に合わないデータもあるので平均を出す際その数値を0にして60個ごとに足し算(分子)、個数を60から条件に合わないデータを除外(例条件に合わないデータがあった場合60から引いていく)(分母)最後に足し算からその除外したデータの個数を割って1分当たりの平均値を出したい。

発生している問題・エラーメッセージ

分母の個数をカウントしたものを(1440個あります)行列にしたいのですが、そこがうまくできません。

該当のソースコード

python

1##1s値を60個ごとに足す 2import pandas as pd 3import numpy as np 4 5 6##1秒値のcsvファイルの読み込み 7df=pd.read_csv('20070725_TMN0001_1s.csv',header=None,encoding='utf=8') 8##2列のデータのマイナス値を0にする 9df1=df.iloc[:,1:2].where(df>= 0,0) 10##2列目の列名を指定 11df1.columns=['データ'] 12##df1に列名「」を追加(3列目のプラス値を0にする) 13df1[None]=df.iloc[:,2:3].where(df<=0,0) 14##条件に合う要素数をカウント 15##df1の60個の要素当たりの和を計算 16df2=df1.groupby(df1.index // 60).sum() 17print(df2) 18##個体数(平均値の分母)を条件を除外し指定。 19a=0 20b=0 21c=-1 22d = [[0 for i in range(1)]for j in range(1440)] 23for x in range(86400): 24 a += 1 25 if df.iloc[x,1] < 0: 26 b += 1 27 if a==60: 28 a=0 29 c += 1 30 d[c][0]=b 31 b=0 32e = list(map(float, d)) 33print(e) 34##print((df.iloc[:,1:2] >= 0).sum()) 35##df2/d.to_csv('20070725_1m3.csv',index=()) 36 37 38

試したこと

ifとforを使い試してみましたが駄目でした

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

対象外のデータの値を 0 に変更し、分母の数を調整するという処理を試みておられますが、pandasではそのような対象外のデータを欠損値(NA)として扱うことで、その後の処理の対象から除外させることができます。(今回の場合は平均の対象から除外させることができる)

ですので、質問のコードは下記のように

  • 条件に合致しないデータの NA にする(pandas.mask()
  • 60行毎に平均を求める(groupby().mean())

にてシンプルに書くことができるかと思います。

Python

1import pandas as pd 2import numpy as np 3 4# ダミーデータの生成 5N = 86400 6df=pd.DataFrame(np.random.randint(-100, 100, (N, 3))) 7 8##2列目のデータのマイナス値をnanにする X 9df[1] = df[1].mask(lambda x: x < 0) 10##3列目のデータのプラス値をnanにする 11df[2] = df[2].mask(lambda x: x > 0) 12# 60行毎に平均を求める 13ret = df.groupby(df.index//60).mean() 14print(ret)

投稿2018/06/18 09:41

magichan

総合スコア15898

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問