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

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

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

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

Q&A

解決済

2回答

2950閲覧

データフレーム内の数字の範囲によって数字を振り分ける

shunsuke1937

総合スコア48

Python 3.x

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

0グッド

0クリップ

投稿2019/01/04 01:35

下記のように数字が表されております。

python

1import pandas as pd 2 3data={'コース':[1,2,3,4], 4 '時間':[0.27,-0.07,-0.1,0.02]} 5 6frame = pd.DataFrame(data) 7frame.set_index('コース',inplace=True) 8frame = pd.DataFrame(data) 9 10#コース 時間 11#1 0.27 12#2 -0.07 13#3 -0.10 14#4 0.02 15

この範囲内の時間ごとにポイントを振り分けて示したいと思っております。
時間 t
-0.15<t<=-0.1 →3ポイント
-0.1<t<=-0.05 →2ポイント
-0.05<t<=0 →1ポイント
0<t<=0.3 →0ポイント
0.3<t → -1ポイント
結果は以下のように示したいです。

python

1#コース ポイント 2#1 0 3#2 2 4#3 3 5#4 0

ご教示のほどよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

numpy.piecewiseでできます。もしかしたらpandasにも該当するものがあるかもしれませんが。

numpy.piecewise — NumPy v1.15 Manual

python

1import numpy as np 2import pandas as pd 3 4data={'コース':[1,2,3,4], 5 '時間':[0.27,-0.07,-0.1,0.02]} 6 7frame = pd.DataFrame(data) 8frame.set_index('コース',inplace=True) 9frame = pd.DataFrame(data) 10 11t = frame['時間'] 12points = np.piecewise(t.values, 13 [x.values 14 for x in 15 ((-0.15<t)&(t<=-0.1), 16 (-0.1<t)&(t<=-0.05), 17 (-0.05<t)&(t<=0), 18 (0<t)&(t<=0.3), 19 0.3<t)], 20 [3,2,1,0,-1]) 21frame['ポイント'] = points.astype(int) 22print(frame) 23""" => 24 コース 時間 ポイント 250 1 0.27 0 261 2 -0.07 2 272 3 -0.10 3 283 4 0.02 0 29"""

投稿2019/01/04 01:47

hayataka2049

総合スコア30933

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

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

shunsuke1937

2019/01/04 03:27

ご回答いただき、ありがとうございます。 上記の内容で理解することができました。また、参照ページまで示していただき 容易に理解することができました。大変感謝いたします。
guest

0

以下のようにポイントに変換関数を.applyで適用すればよいです。

Python

1def to_point(t): 2 if -0.15<t and t<=-0.1: return 3 3 # 略 4 elif t < -3: return -1 5 6# 略 7frame['ポイント'] = frame['時間'].apply(to_point)

投稿2019/01/04 01:49

can110

総合スコア38266

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

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

shunsuke1937

2019/01/04 03:28

ご回答いただき、ありがとうございます。 上記の内容で理解することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問