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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

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

Q&A

解決済

1回答

1068閲覧

Python if構文の書き方について

qsuke

総合スコア11

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

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

0グッド

0クリップ

投稿2019/08/29 11:20

前提・実現したいこと

日々の株価の、各移動平均線の上下の位置関係を判別するコードをPythonで書きたいです。
前提としては、各日ごとの株価データはあり、それをもとに移動平均の数値を計算しています。その数値(計算式)を使ってif文で大小を比較し、それをデータフレームに反映させたいと考えているのですが、うまく表現できずに困っています。

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

if文がうまく書けません。

該当のソースコード

# 指数平滑移動平均計算 def calc_ema(prices, period): ema = np.zeros(len(prices)) ema[:] = np.nan # NaN で初期化 ema[period-1] = prices[:period].mean() # 最初だけ単純移動平均 for d in range(period, len(prices)): ema[d] = (ema[d-1] * (period - 1) + prices[d] * 2) / (period + 1) return ema df['ema5'] = calc_ema(df.close, 5) df['ema20'] = calc_ema(df.close, 20) df['ema40'] = calc_ema(df.close, 40) この計算をもとに、 ema5 > ema20 > ema40なら「1」と返して、ema20 > ema5 > ema40なら「2」と返して… などとしたいができない、という状況です。どなたか、シンプルに書ける方法を教えていただけると助かります。よろしくお願いします。

試したこと

(上記記載済み)

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

(特になし)

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

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

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

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

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

tiitoi

2019/08/29 11:54

pandas の質問をする際はサンプルデータを提示してください
guest

回答1

0

ベストアンサー

各データごとに処理を行うような場合、DataFrameのapplyメソッドを使用します。

pandasで要素、行、列に関数を適用するmap, applymap, apply | note.nkmk.me

python

1import random 2import pandas as pd 3 4random.seed(0) 5 6df = pd.DataFrame({"ema5": [random.randrange(10) for _ in range(10)], 7 "ema20":[random.randrange(10) for _ in range(10)], 8 "ema40":[random.randrange(10) for _ in range(10)]}) 9 10def f(s): 11 if s["ema5"] > s["ema20"] > s["ema40"]: 12 return 0 13 elif s["ema5"] > s["ema20"] < s["ema40"]: 14 return 1 15 # あとはお好きに 16 else: 17 return 3 18print(df) 19df["result"] = df.apply(f, axis=1) 20print(df) 21""" => 22 ema20 ema40 ema5 230 9 9 6 241 3 2 6 252 8 4 0 263 2 1 4 274 4 1 8 285 2 5 7 296 1 7 6 307 9 8 4 318 4 1 7 329 8 5 5 33 ema20 ema40 ema5 result 340 9 9 6 3 351 3 2 6 0 362 8 4 0 3 373 2 1 4 0 384 4 1 8 0 395 2 5 7 1 406 1 7 6 1 417 9 8 4 3 428 4 1 7 0 439 8 5 5 3 44"""

投稿2019/08/29 12:00

hayataka2049

総合スコア30933

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

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

qsuke

2019/08/29 16:57

分かりやすく説明いただき、ありがとうございます! いただいたものをもとに、自分のやりたいことに展開して形にすることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問