merge(..., how='left')
「左」のデータフレームと一致するエントリのみを保持したいので、 を使用して 2 つのデータフレームをマージしています。問題は、マージ操作によって、左端のデータフレームのインデックスが削除されたように見えることです。次に示すのは、次のとおりです。
import pandas
df1 = pandas.DataFrame([{"id": 1,
"name": "bob"},
{"id": 10,
"name": "sally"}])
df1 = df1.set_index("id")
df2 = pandas.DataFrame([{"name": "bob",
"age": 10},
{"name": "sally",
"age": 11}])
print "df1 premerge: "
print df1
df1 = df1.merge(df2, on=["name"],
how="left")
print "merged: "
print df1
# This is not "id"
print df1.index
# And there's no "id" field
assert ("id" in df1.columns) == False
マージ前は、df1
によって索引付けされていましたid
。マージ操作の後、マージされたデータフレームのデフォルトの数値インデックスだけがあり、id
フィールドは削除されました。この種のマージ操作を行うには、一番左のデータフレームのインデックスを保持するにはどうすればよいですか?
明確にするために: のすべての列を、一致する値を持つdf2
すべてのエントリに追加する必要があります。のエントリが にない値を持つ場合、それは にマージされるべきではありません (したがって)。df1
id
df2
id
df1
how='left'
編集:ハックとしてもできます:df1.reset_index()
しかし、マージしてからインデックスを再度設定しますが、可能であればそうしないことを好みます。マージでインデックスを削除する必要はないようです。ありがとう。