首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫在Python的合并中降低索引?

熊猫在Python的合并中降低索引?
EN

Stack Overflow用户
提问于 2013-03-27 14:31:41
回答 1查看 15.3K关注 0票数 9

我使用merge(..., how='left')合并两个数据格式,因为我只想保留与“左”数据格式匹配的条目。问题是合并操作似乎删除了我最左边的dataframe的索引,如下所示:

代码语言:javascript
复制
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

在合并之前,df1id索引。合并操作之后,只有合并数据的默认数字索引,id字段被删除。如何才能完成这种合并操作,但保留最左边数据的索引呢?

为了澄清:我希望将df2的所有列添加到具有匹配的id值的df1中的每个条目中。如果df2中的条目有一个id值而不是df1,那么就不应该将其合并(因此是how='left')。

编辑:我可以像黑客一样:df1.reset_index()但是合并,然后再设置索引,但如果可能的话,我不喜欢这样做,似乎合并不应该需要删除索引。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-05-27 18:19:05

您已经指出,在合并之前执行reset_index,在合并之后执行set_index,这是可行的。我所知道的在合并过程中保存索引的唯一方法是,合并涉及至少一个正在合并的数据帧上的索引。所以在这里,你可以:

代码语言:javascript
复制
In [403]: df2 = df2.set_index('name')

In [404]: df1.merge(df2, left_on='name', right_index=True)
Out[404]: 
     name  age
id            
1     bob   10
10  sally   11

要合并df1 2的索引,我们已经从它的“name”列中提取了它,并将其与df1上的“name”列合并。

这有点道理,因为否则生成的dataframe的索引是模棱两可的,因为它可能来自任何一个dataframe。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15661455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档