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

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

ただいまの
回答率

90.04%

python のpandasを使ったmergeについて(条件付き)

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 50

huuuuuuu

score 1

pythonのpandasを使用して、元となるデータの一覧表csvファイル(all_date.csv)から値を抽出し、list.csvのcost欄に値を書き込みたいと考えております。

元のデータ一覧表csvの中身↓

[car,buildings,cost][1,23,0.267][2,23,0.565][3,23,1.7625][1,54,0.65712][2,54,0.9836][3,54,0.234]......

car        :1~3
buildings  :連番ではない(かなりのデータ数ある)

であり、list.csv(中身は以下に記述)がある時に、元データのbuildingsとlist.csvのbuildings(二つのbuildingsは対応している)からlist.csvのcostを埋めるにはmergeで対応できるかと思います。

list.csv[buildings,time,cost][23,0.65,  ][54,0.345,   ].....

import pandas as pd

df = pd.read_csv("all_date.csv")
df2 = pd.read_csv("list.csv")
results = df.merge(df2,on="buildings")

ここから質問になるのですが、
①list.csvを[buildings,time,total_cost]としてtotal_cost=time+(元ファイルの)costとしたときにはどのように変更すればよろしいでしょうか。

②また、total_costを計算する為のcostはall_date.csvのbuildingsが同一でcarが異なるcostの3つのうち(最も小さいcostを用いることを原則とするが、使用できるcarの数に制限(car:1は1回のみ,car:2は2回,car:3は2回使用可能)がある時に、最小のcostを持つcarが制限数使われていた場合に最も小さいcostではなく、2番目に小さなcostを使用、3番目に小さなcostを使用するといった時にどのように変更したらよろしいでしょうか。
list.csvにはデータが30ほどあり、carの数(5台)を考えると、total_costを計算できるのは5つだけになります。計算できる5つをどのように決めるかは、list.csvのtimeが小さい順として考えています。

最終的にはlist.csvはlist1.csv~list1000.csvのように複数ファイルで同一のことをやりたいと考えております。

上記二点についてご教授いただけましたら、幸いです。
よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • yuba

    2019/11/07 20:35

    all_date.csv のサンプルデータを見るに、buildingsからcostは一意に決まらないようです。

    例えばlist.csvの一行目のcostにはどんな値が入ってほしいのでしょう?

    キャンセル

  • huuuuuuu

    2019/11/07 20:44

    list.csvとall_date.csvにはbuildingsという共通項があります。
    例としてlist_csvのbuildingsをみると23という数字があります。list_csvのcostに入れたい数字はall_date.csvのbuildingsが23のうちcostが最も小さい0.267になります。

    キャンセル

  • meg_

    2019/11/09 08:21

    データが多くなければループ処理でも良いかと思います。
    groupby()やmap()を使用すれば大きなデータにも対応できるかと思います。

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 90.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る