6
我正在使用merge(..., how='left')
合并两个数据帧,因为我只想保留与“左”数据帧匹配的条目。问题是,合并操作似乎放弃我最左边的数据帧的指数,如下所示:pandas在Python中删除合并索引索引?
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()
但合并,然后再设置索引,但我不希望如果可能的话,好像合并不应该删除索引。谢谢。
您可以尝试通过名称而不是id对'df1'和'df2'进行索引,然后使用'join'而不是'merge'如下所示:'df1.join(df2)'将保留索引。 – bdiamante 2013-03-27 14:45:06
这是不可能的,因为'name'在'df1'中不是唯一的 – user248237dfsf 2013-03-27 14:50:15
为什么你不合并后的set_index? – user1827356 2013-03-27 15:00:00