Python 3.x 合并的数据帧似乎缺少两行
我运行了以下代码:Python 3.x 合并的数据帧似乎缺少两行,python-3.x,pandas,dataframe,indexing,merge,Python 3.x,Pandas,Dataframe,Indexing,Merge,我运行了以下代码: df1 = pd.DataFrame({'HPI':[80,85,88,85], 'Int_rate':[2, 3, 2, 2], 'US_GDP_Thousands':[50, 55, 65, 55]}, index = [2001, 2002, 2003, 2004]) df3 = pd.DataFrame({'HPI':[80,85,88,85],
df1 = pd.DataFrame({'HPI':[80,85,88,85],
'Int_rate':[2, 3, 2, 2],
'US_GDP_Thousands':[50, 55, 65, 55]},
index = [2001, 2002, 2003, 2004])
df3 = pd.DataFrame({'HPI':[80,85,88,85],
'Unemployment':[7, 8, 9, 6],
'Low_tier_HPI':[50, 52, 50, 53]},
index = [2001, 2002, 2003, 2004])
print(pd.merge(df1,df3, on='HPI'))
我得到的输出为:
HPI Int_rate US_GDP_Thousands Low_tier_HPI Unemployment
0 80 2 50 50 7
1 85 3 55 52 8
2 85 3 55 53 6
3 85 2 55 52 8
4 85 2 55 53 6
5 88 2 65 50 9
我的问题是
1) 为什么我有这么大的数据帧。HPI只有4个值,但在输出中已生成6行
2) 如果merge将从HPI中获取所有值,那么为什么值80和88没有分别获取两次呢?您将获得
85
4次,因为在df1
和df2
的联接列中重复了HPI
。而88
和80
是唯一的,因此内部连接会为每个连接返回alo一行
显然,内部联接
意味着,如果两个表中的联接列上都有匹配项,那么每一行都将被匹配尽可能多的次数
因此,在合并之前,需要删除重复项以获得正确的输出
df1 = df1.drop_duplicates('HPI')
df3 = df3.drop_duplicates('HPI')
在HPI
列和输出中具有重复值的样本:
#2dupes 85
df1 = pd.DataFrame({'HPI':[80,85,88,85],
'Int_rate':[2, 3, 2, 2],
'US_GDP_Thousands':[50, 55, 65, 55]},
index = [2001, 2002, 2003, 2004])
#2dupes 85
df3 = pd.DataFrame({'HPI':[80,85,88,85],
'Unemployment':[7, 8, 9, 6],
'Low_tier_HPI':[50, 52, 50, 53]},
index = [2001, 2002, 2003, 2004])
#4dupes 85 - 2x2, value 85 in both columns
print(pd.merge(df1,df3, on='HPI'))
HPI Int_rate US_GDP_Thousands Low_tier_HPI Unemployment
0 80 2 50 50 7
1 85 3 55 52 8
2 85 3 55 53 6
3 85 2 55 52 8
4 85 2 55 53 6
5 88 2 65 50 9
您将获得
85
4次,因为在df1
和df2
的联接列中重复了HPI
。而88
和80
是唯一的,因此内部连接会为每个连接返回alo一行
显然,内部联接
意味着,如果两个表中的联接列上都有匹配项,那么每一行都将被匹配尽可能多的次数
因此,在合并之前,需要删除重复项以获得正确的输出
df1 = df1.drop_duplicates('HPI')
df3 = df3.drop_duplicates('HPI')
在HPI
列和输出中具有重复值的样本:
#2dupes 85
df1 = pd.DataFrame({'HPI':[80,85,88,85],
'Int_rate':[2, 3, 2, 2],
'US_GDP_Thousands':[50, 55, 65, 55]},
index = [2001, 2002, 2003, 2004])
#2dupes 85
df3 = pd.DataFrame({'HPI':[80,85,88,85],
'Unemployment':[7, 8, 9, 6],
'Low_tier_HPI':[50, 52, 50, 53]},
index = [2001, 2002, 2003, 2004])
#4dupes 85 - 2x2, value 85 in both columns
print(pd.merge(df1,df3, on='HPI'))
HPI Int_rate US_GDP_Thousands Low_tier_HPI Unemployment
0 80 2 50 50 7
1 85 3 55 52 8
2 85 3 55 53 6
3 85 2 55 52 8
4 85 2 55 53 6
5 88 2 65 50 9
正如jezrael所写,您有6行,因为df1和df3中的
HPI=85
的值不是唯一的。与df1和df3相反,只有HPI=80
和HPI=88
的值。
如果我假设并考虑你的<代码>索引>代码>,我可以猜出你想要的是这样的:
HPI Int_rate US_GDP_Thousands Low_tier_HPI Unemployment
index
2001 80 2 50 50 7
2002 85 3 55 52 8
2003 88 2 65 50 9
2004 85 2 55 53 6
如果你想要这样的东西,那么你可以:
pd.merge(df1, df3, left_index=True, right_index=True, on='HPI')
但是我只是做一个假设,所以我不知道这是否是您想要的输出。正如jezrael所写的,您有6行,因为df1和df3中的
HPI=85
的值不是唯一的。与df1和df3相反,只有HPI=80
和HPI=88
的值。
如果我假设并考虑你的<代码>索引>代码>,我可以猜出你想要的是这样的:
HPI Int_rate US_GDP_Thousands Low_tier_HPI Unemployment
index
2001 80 2 50 50 7
2002 85 3 55 52 8
2003 88 2 65 50 9
2004 85 2 55 53 6
如果你想要这样的东西,那么你可以:
pd.merge(df1, df3, left_index=True, right_index=True, on='HPI')
但是我只是做一个假设,所以我不知道这是否是您想要的输出。Downvoter,如果我的答案有问题,请告诉我,以便我可以更正。谢谢,好的。。但是88和80在两个数据帧中都存在。那么为什么不重复呢???@DibakarBose-但值并不复杂,存在差异。@DibakarBose-我添加了更多样本,请检查是否更清晰。Downvoter,如果我的答案有问题,请让我知道,以便我可以更正。谢谢,好的。。但是88和80在两个数据帧中都存在。那么为什么不重复呢???@DibakarBose-但数值并不复杂,存在差异。@DibakarBose-我添加了更多的样本,请检查它是否更清晰。我强烈建议您仔细阅读可能的副本。您的问题更多的是关于一般性地理解合并,那里的教程中有一些示例演示了您可以期望的内容。@jpp::当然。。。我会这么做的。。。谢谢:)我强烈建议你通读一下。您的问题更多的是关于一般性地理解合并,那里的教程中有一些示例演示了您可以期望的内容。@jpp::当然。。。我会这么做的。。。谢谢:)是的。。。这就是我想要的输出…:)对这就是我想要的输出…:)