前提
2ヵ月ほど前からpythonを触り始めました。
NoとDataの2つの列からなるデータフレーム(df1)上から、特定のNoの間の区間を複数個所抽出したい。凡そ1万行くらいのデータ
特定のNoの区間はあらかじめ設定されており、別のデータフレーム(df2)に格納されている。イメージは下記の通りです。
<df1>ここからデータを抽出したい
No | Data |
---|---|
1 | 10 |
2 | 13 |
3 | 18 |
… | … |
10000 | 120 |
<df2>抽出したいNoが入っているリスト
始めのNo | 終わりNo |
---|---|
10 | 33 |
40 | 98 |
500 | 720 |
1000 | 1450 |
実現したいこと
・df2で指定された条件の区間のNoをdf1から抽出したい
・可能であれば、抽出されたそれぞれの区間のデータをData1,Data2のように名前付けして列に並べて表示したい。
発生している問題
抽出したい区間が凡そ20区間以下なので、今はdf1からdf2のデータを手打ちで打ち込んでqueryにて抽出してくるというやり方を行っていますが。
同様のことを行いたいデータが複数あり、効率化したい状況です。
該当のソースコード
import pandas as pd import numpy as np df1 = pd.DataFrame(np.arange(20000).reshape(10000, 2),columns=['No', 'Data']) df1['No'] = range(len(df1)) df1['Data']=np.linspace(0,120,10000) df2 = pd.DataFrame(np.arange(12).reshape(6,2),columns=['Start_No','End_No']) df2['Start_No']=[10,800,1300,3000,4000,8000] df2['End_No']=[130,1100,2500,3700,6000,8000] df_a = df1.query("10<=No<=130") df_a['No']=range(len(df_a)) df_a = df_a.rename(columns={'Data':'Data1'}) df_b = df1.query("800<=No<=1100") df_b['No']=range(len(df_b)) df_b = df_b.rename(columns={'Data':'Data2'}) df_fin= pd.merge(df_a,df_b,on=["No"],how="outer") print(df1) print(df2) print(df_fin)
試したこと
いろいろ調べたのですが手打ち以外の手段を見つけられていません。。
補足情報(FW/ツールのバージョンなど)
google colabを使っています。
回答2件
あなたの回答
tips
プレビュー