【发布时间】:2013-05-28 02:19:05
【问题描述】:
我正在使用merge(..., how='left') 合并两个数据框,因为我只想保留与“左侧”数据框匹配的条目。问题是合并操作似乎删除了我最左边的数据框的索引,如下所示:
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 中的条目具有不在df1 中的id 值,则不应将其合并(因此how='left')。
编辑:我可以作为一个黑客做:df1.reset_index() 但合并然后再次设置索引,但如果可能的话,我不喜欢这样做,似乎合并不应该放弃指数。谢谢。
【问题讨论】:
-
您可以尝试按名称而不是 id 索引
df1和df2,然后使用join而不是merge,如下所示:df1.join(df2)这将保留索引。跨度> -
这是不可能的,因为
name在df1中不是唯一的 -
合并后为什么不set_index?
-
我会,但它会删除我想成为合并后索引的列,即
id -
我找到了this question,这似乎是一回事。答案基本上就是你所说的黑客攻击。