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

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

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

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

pandas

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

Q&A

解決済

2回答

1810閲覧

Python pandasのDataFrameで特定の行から複数行抽出する方法

WsFkt75O8rrra53

総合スコア2

Python

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

pandas

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

0グッド

0クリップ

投稿2021/06/16 15:44

python初心者です。
csvファイルを読み込んでグラフ化する作業を行おうとしています。
その際に、特定の行から複数行(行数指定して)抽出したいのですがよい方法などありますでしょうか。

下記のようなデータの時に、「抽出対象日付のテーブル」にある日付と一致した
「抽出対象テーブル」の日付から特定の行数を指定して抽出したいです。

抽出対象テーブル

日付
2021.05.0112
2021.05.0513
2021.05.0715
2021.05.0914
2021.05.1211
2021.05.1514
2021.05.3115

抽出対象日付テーブル
| 日付 |
| --- | --
|2021.05.05|
|2021.05.09|

特定行数を4とした場合
下記ふたつが抽出されるイメージです。
①2021.05.05の場合

日付
2021.05.0513
2021.05.0715
2021.05.0914
2021.05.1211

②2021.05.05の場合

日付
2021.05.0914
2021.05.1211
2021.05.1514
2021.05.3115

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

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

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

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

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

guest

回答2

0

ベストアンサー

抽出対象の日付がある行が、何行目かを数値で求めて、スライスで切り出すのできそうです。
何行目かを出すのは、いろいろやり方がありますが、日付列をIndex型にすればget_locが使えるので簡単です。

python

1import pandas as pd 2 3N = 4 4 5df = pd.DataFrame({ 6 '日付': ['2021.05.01', '2021.05.05', '2021.05.07', '2021.05.09', '2021.05.12', '2021.05.15', '2021.05.31'], 7 '値': [12, 13, 15, 14, 11, 14, 15] 8}) 9 10dt = pd.Index(df['日付']) 11for target in ['2021.05.05', '2021.05.09']: 12 i = dt.get_loc(target) 13 df2 = df.iloc[i:(i + N)] 14 print(df2) 15# 日付 値 16#1 2021.05.05 13 17#2 2021.05.07 15 18#3 2021.05.09 14 19#4 2021.05.12 11 20# 日付 値 21#3 2021.05.09 14 22#4 2021.05.12 11 23#5 2021.05.15 14 24#6 2021.05.31 15

抽出対象の日付がない場合や、複数ある場合については考慮してないので、そういうケースがある場合は必要に応じて対応してください。

投稿2021/06/17 00:50

bsdfan

総合スコア4574

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

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

WsFkt75O8rrra53

2021/06/17 08:11

ご指摘の通り実施したら解決しました。ありがとうございます!
guest

0

shiftを使ってもできますが、以下の方が簡単でしょう。

python

1>>> max_count = 4 2>>> def func(x): 3... global count 4... count -= 1 5... if x == start_date: 6... count = max_count 7... return count > 0 8... 9>>> print(df) 10 日付 値 110 2021.05.01 12 121 2021.05.05 13 132 2021.05.07 15 143 2021.05.09 14 154 2021.05.12 11 165 2021.05.15 14 176 2021.05.31 15 18>>> 19>>> start_date = '2021.05.05' 20>>> count = 0 21>>> 22>>> print(df[df['日付'].apply(func)]) 23 日付 値 241 2021.05.05 13 252 2021.05.07 15 263 2021.05.09 14 274 2021.05.12 11 28>>> 29>>> start_date = '2021.05.09' 30>>> count = 0 31>>> 32>>> print(df[df['日付'].apply(func)]) 33 日付 値 343 2021.05.09 14 354 2021.05.12 11 365 2021.05.15 14 376 2021.05.31 15

投稿2021/06/16 18:10

ppaul

総合スコア24666

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

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

WsFkt75O8rrra53

2021/06/17 08:11

ご指摘の通り実施したら解決しました。ありがとうございます! 今後の参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問