私は R ユーザーですが、pandas で match() に相当するものを理解できません。この関数を使用して、一連のファイルを反復処理し、重要な情報を取得して、それを「url」の現在のデータ構造にマージする必要があります。Rでは、次のようにします。
logActions <- read.csv("data/logactions.csv")
logActions$class <- NA
files = dir("data/textContentClassified/")
for( i in 1:length(files)){
tmp <- read.csv(files[i])
logActions$class[match(logActions$url, tmp$url)] <-
tmp$class[match(tmp$url, logActions$url)]
}
それぞれが毎回logActions $ classを上書きするため、merge()またはjoin()を使用できるとは思いません。どちらも必要なインデックス作成機能を持っていないため、 update() も Combine_first() も使用できません。また、この SO 投稿に基づいて match() 関数を作成しようとしましたが、DataFrame オブジェクトで動作させる方法がわかりません。明らかな何かが欠けている場合はお詫び申し上げます。
これは、パンダで match() のようなことをしようとする私の効果のない試みをまとめた python コードです。
from pandas import *
left = DataFrame({'url': ['foo.com', 'foo.com', 'bar.com'], 'action': [0, 1, 0]})
left["class"] = NaN
right1 = DataFrame({'url': ['foo.com'], 'class': [0]})
right2 = DataFrame({'url': ['bar.com'], 'class': [ 1]})
# Doesn't work:
left.join(right1, on='url')
merge(left, right, on='url')
# Also doesn't work the way I need it to:
left = left.combine_first(right1)
left = left.combine_first(right2)
left
# Also does something funky and doesn't really work the way match() does:
left = left.set_index('url', drop=False)
right1 = right1.set_index('url', drop=False)
right2 = right2.set_index('url', drop=False)
left = left.combine_first(right1)
left = left.combine_first(right2)
left
望ましい出力は次のとおりです。
url action class
0 foo.com 0 0
1 foo.com 1 0
2 bar.com 0 1
しかし、各ファイルを反復できるように、これを何度も呼び出すことができる必要があります。