将数据框A的列1合并到数据框B,当数据框B的列1中存在多个匹配行时?

huangapple go评论69阅读模式
英文:

Pandas merging column 1 from dataframe A to dataframe B, when there are multiple matching rows in column 1 of dataframe B?

问题

我正在尝试将一个数据框中与特定文学文本相关的数据合并到另一个数据框中。在第一个数据框中,有两列,一列是标题信息,另一列是小说的章节。例如:

第一个数据框:

标题 章节
书1 开始
书1 中间
书1 结尾
书2 开始
书2 中间
书2 结尾

第二个数据框中,有关每本书的分类数据。例如:

第二个数据框:

标题 美国人
书1
书2

我需要根据标题将它们合并,以便第二个数据框中的“美国人”值在第一个数据框中重复,如下所示:

合并后的数据框:

标题 章节 美国人
书1 开始
书1 中间
书1 结尾
书2 开始
书2 中间
书2 结尾

根据我最接近的尝试(基于[pandas合并指南]https://stackoverflow.com/questions/53645882/pandas-merging-101),是这样的:

df4.merge(df5["美国人"], left_on=["标题"], right_on=["标题"], how="left")

如果没有指定left_onright_on,会出现要求提供right_on值的错误,尽管文档中没有提到这一点。然而,现在我遇到了一个KeyError: '标题'的问题,尽管"标题"明确是两个数据框中的列标题。

英文:

I'm trying to get data associated with certain literary texts from one dataframe into another. In the first dataframe, there are two columns, one with title info, and one with the section of the novel. For example

Title Section
Book1 beginning
Book1 middle
Book1 end
Book2 beginning
Book2 middle
Book2 end

In a second dataframe, I have categorical data about each book. For example:

Title American
Book1 yes
Book2 no

I need to merge them on Title so that the 'American' values from the second dataframe duplicate in the first dataframe, as follows:

Title Section American
Book1 beginning yes
Book1 middle yes
Book1 end yes
Book2 beginning no
Book2 middle no
Book2 end no

The closest I've gotten (based on the [pandas merge guide]<https://stackoverflow.com/questions/53645882/pandas-merging-101> is:

df4.merge(df5[&quot;American&quot;], left_on=[&quot;Title&quot;], right_on=[&quot;Title&quot;], how = &quot;left&quot;)

Without have both left_on and right_on, I get an error demanding a right_on value, despite the documentation. However, now I am getting a KeyError: 'Title', even though Title is definitely a column header in both dataframes?

答案1

得分: 1

你之所以出现关键错误,是因为你试图将df4与df5的“American”列合并。因此,它看不到df5上的“Title”列。

尝试这个:

df4.merge(df5, how="left", on="Title")
英文:

You are getting key error just because you are trying to merge df4 with just "American" column of df5. Therefore it doesn't see the "Title" column on df5.

Try this one :

df4.merge(df5, how = &quot;left&quot;,on=&quot;Title&quot;)

huangapple
  • 本文由 发表于 2023年2月24日 03:16:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/75549374.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定