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

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

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

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

pandas

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

Q&A

解決済

2回答

1013閲覧

データフレームで前日のデータを参照する方法について

tanak.aaaaa

総合スコア6

Python

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

pandas

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

0グッド

0クリップ

投稿2021/07/13 07:11

df=pd.read_csv("Desktop\Book1.csv", header=None) for i, row in df.iterrows(): if row[1]< *******: print(row[0])

"Desktop\Book1.csv"

"Desktop\Book1.csv"に記載されているデータ(上記画像)の中でrow1のデータが任意の日数前のrow1データより大きかった日の日付(row0)をプリントするといった内容のコードを書こうとしています。

(例 任意の日数前が1日の場合、Row1Column1は一つ下のRow1Column2よりも大きい為Row0Column1がプリントされる)

しかし"if row[1]<"の*******に入るであろう任意の日数前の値の特定方法が分からない為先に進むことが出来ません。

この形式の*******に記載すべきコードをお教えいただければ大変ありがたいのですが、違う形で同じ事が出来る様な方法がありましたらそちらをお教えいただきたく思います。また特定の日数前が記載出来ればうれしいですが、特定の日数分下(1日前なら1個下、2日前なら2つ下)のデータを参照する方法の方が適切なのでしたらそちらをお教え頂ければと思います。

数時間に渡り様々な試行錯誤をいたしましたが解決の糸口すら見つからない為皆様のお力添えいただけないかと思い質問を書かせていただきました。

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

データは乱数で作っています。

python

1>>> print(df) 2 0 1 30 2021/7/13 0.650301 41 2021/7/12 0.113878 52 2021/7/11 0.098083 63 2021/7/10 0.491752 74 2021/7/9 0.202177 85 2021/7/8 0.803943 96 2021/7/7 0.708386 107 2021/7/6 0.341205 118 2021/7/5 0.467567 129 2021/7/4 0.498543 1310 2021/7/3 0.892079 1411 2021/7/2 0.318291 1512 2021/7/1 0.565885 16>>> n = 2 17>>> print(list(df[df[1]>df.shift(-n)[1]][0])) 18['2021/7/13', '2021/7/8', '2021/7/7', '2021/7/4', '2021/7/3'] 19>>> n = 3 20>>> print(list(df[df[1]>df.shift(-n)[1]][0])) 21['2021/7/13', '2021/7/8', '2021/7/7', '2021/7/5']

投稿2021/07/13 08:57

ppaul

総合スコア24670

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

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

tanak.aaaaa

2021/07/15 04:32

回答ありがとうございます。 書いていただいたコードを読ませていただき自分がshiftの使用方法が大きく間違っていたことに気づきお教えいただいた事を参考に修正をしてみたところ上手く稼働させることが出来ました。 大変勉強になりました。
guest

0

python

1import pandas as pd 2import numpy as np 3 4rng = pd.date_range("7/1/2021 00:00", periods=13, freq="D") 5 6df = pd.DataFrame(abs(np.random.randn(len(rng))), rng).reset_index() 7df.columns=[0,1] 8df = df.sort_index(ascending=False,ignore_index=True) 9 10""" 11df 12 0 1 130 2021-07-13 1.206927 141 2021-07-12 0.049708 152 2021-07-11 0.895359 163 2021-07-10 0.150701 174 2021-07-09 0.683769 185 2021-07-08 0.804138 196 2021-07-07 0.459253 207 2021-07-06 0.771655 218 2021-07-05 0.489829 229 2021-07-04 1.033866 2310 2021-07-03 1.166754 2411 2021-07-02 0.371953 2512 2021-07-01 3.116041 26""" 27 28# 一日前の値を算出及び引き算を実施した値を、新たな列に格納 29ddf = df.assign( 30 prev=lambda x: x[1].diff() 31) 32 33 34ddf.query('prev > 0') 35 36""" 37 0 1 prev 382 2021-07-11 0.895359 0.845651 394 2021-07-09 0.683769 0.533068 405 2021-07-08 0.804138 0.120369 417 2021-07-06 0.771655 0.312402 429 2021-07-04 1.033866 0.544037 4310 2021-07-03 1.166754 0.132888 4412 2021-07-01 3.116041 2.744088 45 46結果の行については、乱数で作っていますので、かわります。 47""" 48

pandas.DataFrame.diff

投稿2021/07/13 08:47

toshikawa

総合スコア388

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

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

tanak.aaaaa

2021/07/15 04:28

回答ありがとうございます。 lambdaを使うというアイデアが無かったので目からうろこが落ちた気分です。 大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問