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

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

ただいまの
回答率

88.20%

RのテーブルデータをPythonのpandasに書き換えたい

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 231

ogatti0917

score 4

実現したいこと

  • 下記に示すRのコードのコメントの行(addtionaltable)をPythonに書き換えたい

前提

  • Python3を用いています。
  • Rと変数の置き方が同じです。
  • コードはレコメンドエンジンのコードです。
  • for文を回すことだけはしたくないです。

書き換えたいRのコード

library(data.table)

submission = fread("data/sample_submission.csv", col.names=c("KaiinID", "AuctionID"))
submission = unique(submission[, .(KaiinID)], by = NULL)

auction = fread("data/auction.csv", col.names=c('AuctionID','ShouhinShubetsuID','ShouhinID', 'SaishuppinKaisuu','ConditionID', 'BrandID', 'GenreID','GenreGroupID', 'LineID','ColorID', 'DanjobetsuID', 'SankouKakaku', 'CreateDate'))
auction$'CreateDateOrder' = as.double(as.Date(substring(auction$CreateDate, 1, 10))-as.Date("2019-10-01"))

watchlist = fread("data/watchlist.csv", col.names=c('KaiinID', 'AuctionID','TourokuDate','SakujoFlag', ))
watchlist$TourokuDate = as.double(as.Date(substring(watchlist$TourokuDateOrder, 1, 10))-as.Date("2019-10-01"))
watchlist = merge(watchlist, auction, by = "AuctionID")

shudounyuusatsu = fread("data/shudounyuusatsu.csv", col.names=c('AuctionID','KaiinID','ShudouNyuusatsuDate', 'Kingaku', 'Suuryou','SokketsuFlag', 'SakujoFlag'))
shudounyuusatsu$ShudouNyuusatsuDateOrder = as.double(as.Date(substring(shudounyuusatsu$ShudouNyuusatsuDate, 1, 10))-as.Date("2019-10-01"))
shudounyuusatsu = merge(shudounyuusatsu, auction, by = 'AuctionID')

dateorder = -7

predict = rbind(
    auction[, .(KaiinID, AuctionID, Point = 1 / (dateorder - CreateDateOrder) ** 0.5 / (dateorder - ShudouNyuusatsuDateOrder))]
    , watchlist[SakujoFlag == 1, .(KaiinID, AuctionID, Point = 4 / (dateorder - CreateDateOrder) ** 0.5 / (dateorder - TourokuDateOrder))]
)
predict = merge(predict, submission, by = "KaiinID", all.y = T)
predict = predivt[, .(Point = max(Point)), .(KaiinID, AuctionID)]
predict = predict[order(-Point)]

addtionaltable = auction[CreateDateOrder == dateorder - 5, .(AuctionID =  sample(AuctionID, 20))]
predict = predict[, .(Ranking = 1:20, AuctionID = c(AuctionID[!is.na(AuctionID)], addtionaltable$AuctionID)[1:20]), .(KaiinID)] 
#additionaltableの箇所をpythonのpandasを用いて書き換えたい

書き換え後のPythonのコード例

import pandas as pd
from datetime import datetime 
auction = pd.read_csv("data/auction.csv")
shudounyuusatsu = pd.read_csv("data/shudounyuusatsu.csv")
watchlist = pd.read_csv("data/watchlist.csv")

submission = pd.read_csv("data/sample_submission.csv")
submission = submission.KaiinID.unique()
submission = pd.DataFrame([list(submission)],index=["KaiinID"]).T

auction["CreateDateOrder"] = auction.CreateDate.map(lambda x: x[0:10]).map(
    lambda x: datetime.strptime(x, '%Y-%m-%d'))-datetime.strptime('2019-10-01', '%Y-%m-%d')

watchlist["TourokuDateOrder"] = watchlist.TourokuDate.map(lambda x: x[0:10]).map(
    lambda x: datetime.strptime(x, '%Y-%m-%d'))-datetime.strptime('2019-10-01', '%Y-%m-%d')
watchlist = pd.merge(watchlist, auction, on="AuctionID")

shudounyuusatsu["ShudouNyuusatsuDateOrder"] = shudounyuusatsu.ShudouNyuusatsuDate.map(lambda x: x[0:10]).map(
    lambda x: datetime.strptime(x, '%Y-%m-%d'))-datetime.strptime('2019-10-01', '%Y-%m-%d')
shudounyuusatsu = pd.merge(shudounyuusatsu, auction, on='AuctionID')
order = -7

shudounyuusatsu["Point"] = 1/(order-shudounyuusatsu.CreateDateOrder.map(lambda x: x.days))**0.5/(
    order-shudounyuusatsu.ShudouNyuusatsuDateOrder.map(lambda x: x.days))
watchlist["Point"] = 4/(order-watchlist.CreateDateOrder.map(lambda x: x.days)
                        )**0.5/(order-watchlist.TourokuDateOrder.map(lambda x: x.days))

predict = pd.concat([shudounyuusatsu[["KaiinID", "AuctionID", "Point"]],
                     watchlist[watchlist.SakujoFlag == 1][["KaiinID", "AuctionID", "Point"]]])

predict = predict.groupby(["KaiinID", "AuctionID"]).max()
predict = predict.reset_index()
predict = pd.merge(submission, predict, how="left")
predict = predict.sort_values(
    ["Point", "KaiinID", "AuctionID"], ascending=[False, True, True])

addtionaltable = auction[auction.CreateDateOrder.map(
    lambda x:x.days) == order-5].sample(n=20, random_state=0)
addtionaltable = kari["AuctionID"]

#ここからの記述方法がわからない
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • aokikenichi

    2020/07/02 18:14

    データも提示し、加工したい内容を端的に書いた方が回答確率が高まるかと思います。

    途中経過を読み解くのが困難なため回答しにくいのかと。

    キャンセル

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

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

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

関連した質問

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