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

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

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

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

Q&A

解決済

2回答

206閲覧

データフレームとシリーズでの演算方法について

shunsuke1937

総合スコア48

Python 3.x

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

0グッド

0クリップ

投稿2018/12/04 15:29

編集2018/12/04 23:16

やりたいこと

時間と試投回数から平均値を求めるコードを書きたいと思っております。

python

1import pandas as pd 2from pandas import Series,DataFrame 3 4RX = pd.DataFrame(data, columns=['a','b','c','d','e'], 5 index=['one','two','three','four']) 6print(RX) 7#RX 8# a b c d e 9#one 3 4 0 0 1 10#two 0 3 0 0 0 11#three 3 1 5 6 1 12#four 0 3 0 2 2 13SN = (RX != 0).sum(axis=1).to_frame() 14SN1=SN.astype('float64') 15#SN⇨下記が試投回数になります。 16# 17#one 3 18#two 1 19#three 5 20#four 3 21 22ST = pd.DataFrame(data2, columns=['f','g','h','i','j'], 23 index=['one','two','three','four']) 24# f g h i j 25#one 0.15 0.11 0.00 0.00 0.23 26#two 0.00 0.14 0.00 0.00 0.00 27#three 0.11 0.44 0.22 0.43 0.11 28#four 0.00 0.15 0.00 0.21 0.34 29ST_sum=ST['f']+ST['g']+ST['h']+ST['i']+ST['j'] 30#ST_sum(データ型,float64)⇨合計タイムを求めています。 31AVE=ST_sum/SN 32#結果(ここでアベレージを求める) 33# 1 2 3 4 5 34# 35#one NaN NaN NaN NaN NaN 36#two NaN NaN NaN NaN NaN 37#three NaN NaN NaN NaN NaN 38#four NaN NaN NaN NaN NaN

という結果が出てしまいます。

python

1#結果 2 3#one 0.16 4#two 0.14 5#three 0.26 6#four 0.23 7

上記の結果を得るにはどのようにコードを書けばよろしいでしょうか?

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

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

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

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

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

can110

2018/12/04 15:55

oneの結果が0.33とありますが、(0.15+0.11+0.23)/3=0.163...ではないでしょうか?
shunsuke1937

2018/12/04 23:16

ご確認ありがとうございます。そのように修正しました。
guest

回答2

0

以下のようにすると0.0を除いて平均をとれます。

Python

1import pandas as pd 2data2 = [ 3 [0.15,0.11,0.00,0.00,0.23], 4 [0.00,0.14,0.00,0.00,0.00], 5 [0.11,0.44,0.22,0.43,0.11], 6 [0.00,0.15,0.00,0.21,0.34] 7] 8ST = pd.DataFrame(data2, columns=['f','g','h','i','j'], 9 index=['one','two','three','four']) 10 11def mean_non_zero(row): 12 sum,cnt = 0,0 13 for c in row: 14 if c != 0.0: 15 sum += c 16 cnt += 1 17 return sum/cnt 18 19ST['mean'] = ST.apply(mean_non_zero,axis=1) 20print(ST['mean']) 21""" 22one 0.163333 23two 0.140000 24three 0.262000 25four 0.233333 26"""

投稿2018/12/04 23:37

can110

総合スコア38256

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

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

shunsuke1937

2018/12/06 14:02

ご回答いただきありがとうございました。 別の方法でのコードの書き方を理解することができました。 上記の方法でも思った結果を得ることができました。
guest

0

ベストアンサー

SNto_frame() で DataFrame に変換せずに Series のままで扱い

Python

1SN = (RX != 0).sum(axis=1) 2ST_sum = ST.sum(axis=1).to_frame() 3AVE=ST_sum/SN

と Series型同士の計算でおこなう。
または逆に ST_sumSN 同様に to_frame() で DataFrame型に変換して

Python

1SN = (RX != 0).sum(axis=1).to_frame() 2ST_sum = ST.sum(axis=1).to_frame() 3AVE=ST_sum/SN

と DataFrame型同士の計算でおこなう。
で良いのではないでしょうか

投稿2018/12/04 23:32

magichan

総合スコア15898

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

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

shunsuke1937

2018/12/06 14:01

ご回答いただきありがとうございました。同じ型同士での計算を必要があるということ納得いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問