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

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

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

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

Python

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

Q&A

解決済

4回答

348閲覧

定義範囲内にデータが有る場合、別データフレームのある値を返す

shu_magi

総合スコア19

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2019/02/21 10:38

編集2019/03/01 01:08

Python初心者です。
扱うデータ量が多いため、最近Pythonを学び始めました。
teratailに表記のあるよう、15分以上考えてもわからなかったため、質問させてください。

わかりにくてんなどありましたら、ご指摘お願いいたします。

前提・実現したいこと

以下のようなデータがある時、別のデータシートで定義したx, y の範囲内にあるかどうかを検索し、
該当する範囲のareaを返すプログラムを書きたいと考えています。

Excelでいう、Vlookupに条件式をつけたような、IndexやMatch関数を組み合わせて作るものかな?とイメージしています。

元のテーブル
|data_ID|x|y|area|
|:--|:--:|--:||
|1|135|36||
|2|138|37||
|3|135|40||
|4|137|37||
|5|139|39||

areaの定義テーブル
|area_ID|x1|x2|y1|y2|area|
|:--|:--:|--:|--:|--:||
|1|135|136.25|35|37.5|1|
|2|136.25|137.5|35|37.5|2|
|3|137.5|138.75|35|37.5|3|
|4|138.75|140|35|37.5|4|
|5|135|136.25|37.5|40|5|
|6|136.25|137.5|37.5|40|6|
|7|17.5|138.75|37.5|40|7|
|8|138.75|140|37.5|40|8|

area割り振り後のテーブル
(area列に対応するareaが付与される)
|data_ID|x|y|area|
|:--|:--:|--:||
|1|135|36|1|
|2|138|37|3|
|3|135|40|5|
|4|137|37|2|
|5|139|39|8|

実施イメージ

別テーブルの条件(x1, x2, y1, y2)を参照し、データテーブルのx, yがそのうちどの区間に入っているか判別、対応するarea列の値を返す、ことをしたいです。

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

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

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

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

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

tiitoi

2019/02/21 10:45 編集

それらのデータはデータベース (MySQL とか) で保存されているのでしょうか?
shu_magi

2019/02/22 03:04

tiitoiさん 元データについては、csvで1日毎に持つ予定としています。
shu_magi

2019/02/22 03:11

条件定義側もcsv等で持つことを考えています。 データ量次第でデータベース等検討していかねば、というところですが、現状は手元のファイルで動くレベルで検証していきたい、という考えでいます。
guest

回答4

0

pandasはいかがでしょう。

python

1import numpy as np 2import pandas as pd 3 4df = pd.DataFrame(np.random.random(size=(10, 2)) * 100) 5df_ref = pd.DataFrame(np.random.random(size=(100, 4)) * 100).sort_values(by=[0, 1, 2, 3]) 6df_ref[4] = np.random.randint(0, 10, size=(100,)) 7 8df.T.apply(lambda x: ','.join(df_ref[(df_ref.values[:, 0] <= x.values[0]) & 9 (df_ref.values[:, 1] >= x.values[0]) & 10 (df_ref.values[:, 2] <= x.values[1]) & 11 (df_ref.values[:, 3] >= x.values[1])].iloc[:, 4].values.astype(str)))

投稿2019/02/21 11:18

mkgrei

総合スコア8560

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

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

shu_magi

2019/02/22 04:57

mkgreiさん ご回答ありがとうございます! 試しにこの方法で、データ、定義それぞれcsvから読み込んでみて出来るか、試してみます。
shu_magi

2019/02/25 10:44

mkgreiさん 処理を行っていくと、下記エラーで詰まりました・・・ index以上の参照になっているようですが、エラー詳細わかりますでしょうか? (一応グーグルにて調べたのですが、わからず・・・) 追記部分に記載します。
guest

0

別途、調べて&伺ってしたところ、以下で解決できました。共有します。

Pyhon

1#元データ 2df = pd.read_csv(XXX.csv) 3 4#area判定用のcsv 5df_ref_area = pd.read_csv("area_list.csv", header=0) 6 7#area列を、df_ref_areaのデータ範囲指定を用いて書き込み 8df["area"]= \ 9[df_ref_area["area"][(df_ref_area["x1"]<=x) & (df_ref_area["x2"]>=x) & (df_ref_area["y1"]<=y) & (df_ref_area["y2"]>=y)].tolist()[0] for x,y in zip(df["lng"],df["lat"])] 10

投稿2019/03/01 01:07

shu_magi

総合スコア19

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

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

0

別途、調べて&伺ってしたところ、以下で解決できました。共有します。

Pyhon

1#元データ 2df = pd.read_csv(XXX.csv) 3 4#area判定用のcsv 5df_ref_area = pd.read_csv("area_list.csv", header=0) 6 7#area列を、df_ref_areaのデータ範囲指定を用いて書き込み 8df["area"]= \ 9[df_ref_area["area"][(df_ref_area["x1"]<=x) & (df_ref_area["x2"]>=x) & (df_ref_area["y1"]<=y) & (df_ref_area["y2"]>=y)].tolist()[0] for x,y in zip(df["lng"],df["lat"])] 10

投稿2019/03/01 01:06

shu_magi

総合スコア19

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

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

0

自己解決

別途、調べて&伺ってしたところ、以下で解決できました。共有します。

Pyhon

1#元データ 2df = pd.read_csv(XXX.csv) 3 4#area判定用のcsv 5df_ref_area = pd.read_csv("area_list.csv", header=0) 6 7#area列を、df_ref_areaのデータ範囲指定を用いて書き込み 8df["area"]= \ 9[df_ref_area["area"][(df_ref_area["x1"]<=x) & (df_ref_area["x2"]>=x) & (df_ref_area["y1"]<=y) & (df_ref_area["y2"]>=y)].tolist()[0] for x,y in zip(df["lng"],df["lat"])] 10

投稿2019/03/01 01:05

shu_magi

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問