pandas panda.join()用于列,而不是索引

0yycz8jy  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(104)

我试着跟随一些已经写好的代码来看看它是如何工作的。在某个点上,作者使用.join()来统一两个dfs作为一个关系数据库,所以我使用.join(),而不是merge,来看看它是如何工作的。据我所知,join无论如何都要使用merge。我已经通读了大型的Pandas Merging 101。
.join()文档说on参数接受索引或列名。我一直无法使列名版本工作。
MWE:
我定义了两个df,它们有一个公共列name,但顺序不同,所以直接索引连接无法正确组织这些。尝试将.joinon='name'一起使用会导致ValueError。我怀疑它试图将一个的索引与另一个的name进行匹配。我必须使用set_index()将列name转换为索引,然后它才能工作。

    • 那么,**为什么.join()一直坚持使用index,如果文档说我可以提供一个列名呢?
import pandas as pd

data1 = {
  "name": ["Sally", "Mary", "John"],
  "age": [50, 40, 30]
}

data2 = {
  "contacted": [True, False, False],
  "name": ["John", "Mary", "Sally"]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

#newdf = df1.join(df2, on='name', lsuffix='_L', rsuffix='_R') #doesn't work "ValueError: You are trying to merge on object and int64 columns. If you wish to proceed you should use pd.concat

newdf = df1.join(df2.set_index('name'), on='name', lsuffix='_L', rsuffix='_R')

print(newdf)
toe95027

toe950271#

您可以使用pd.merge并对两个 Dataframe 的列名进行左连接,请参见以下代码示例:

newdf= pd.merge(df1, df2, how='left', left_on='name', right_on='name')

即使两个 Dataframe 中的列名不同,这也会起作用。

相关问题