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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

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

Q&A

解決済

1回答

319閲覧

pandas DataFrameで存在しないindexを指定した時に近い値を取得したい。

mtpgah

総合スコア5

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

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

1グッド

0クリップ

投稿2024/09/27 12:41

編集2024/09/28 05:15

以下のようなデータフレームがあります。

python

1data = { 2 "A":[4,1,2], 3 "B":[10, 11, 12], 4 "C":[20, 21, 22], 5 } 6df = pd.DataFrame(data, index = pd.Index(["2024-09-20", "2024-09-23", "2024-09-24"], name="Date"))

イメージ説明

このデータフレームからindexを指定してデータを取得する時に、存在しないindexを指定した場合は最も近いindex(前のデータ)のデータを取得するにはどうしたら良いでしょうか?
具体的には以下のようなパターンです。

python

1df = df.loc[['2024-09-22']]

このような場合はエラーになりますが、その際に"2024-09-20"のデータを取得したいです。
ちなみに、"2024-09-25"を指定した場合は"2024-09-24"を取得できるようにしたいです。

お忙しいなか大変恐縮ですが、回答頂けますと幸いです。
よろしくお願いします。

melian👍を押しています

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

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

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

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

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

melian

2024/09/28 03:58 編集

画像ではインデックスが "2024-09-20", "2024-09-23", "2024-09-24" となっていますが、掲示されているコードでは "2024-09-20", "2024-09-23", "2024-09-25" となっています。 df = pd.DataFrame(data, index = pd.Index(["2024-09-20", "2024-09-23", "2024-09-25"], name="Date")) > ちなみに、"2024-09-25"を指定した場合は"2024-09-23"を取得できるようにしたい なので、コードを流用すると "2024-09-25" を指定した場合は "2024-09-25" が返ることになります。(インデックスが画像の通りであれば "2024-09-24" が返ります)
mtpgah

2024/09/28 05:17

修正箇所を間違えてしまいました。 大変申し訳ございませんでした。修正いたしました。 よろしければお伺いしたいのですが、別のケースで'2024-09-22'をした場合で'2024-09-22'自体が存在しない場合はその直前("2024-09-20")でなく直後("2024-09-23")に存在するデータを取得することなどはできますでしょうか?
guest

回答1

0

ベストアンサー

別のケースで'2024-09-22'をした場合で'2024-09-22'自体が存在しない場合はその直前("2024-09-20")でなく直後("2024-09-23")に存在するデータを取得することなどはできますでしょうか?

python

1import pandas as pd 2import numpy as np 3 4 5idx = np.argmin(np.abs(pd.to_datetime(df.index) - pd.to_datetime('2024-09-22'))) 6df = df.iloc[[idx]] 7print(df) 8 9# A B C 10# Date 11# 2024-09-23 1 11 21

投稿2024/09/27 13:05

編集2024/09/28 05:45
melian

総合スコア20590

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

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

mtpgah

2024/09/28 07:03

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問