在pandas中加入两个数据帧 - 了解不同的连接类型?

时间:2017-04-22 19:47:53

标签: python pandas

我有两个我想加入的数据框,但是我对如何这样做感到困惑,或者这是否需要加入。 我的第一个数据框有一个“死亡城市”列,它是一个不唯一的城市的字符串名称(即它可以在数据集中多次出现)。我有另一个数据集,只有两列,“城市”和“邮政编码”,其中包含城市列表及其相应的邮政编码。我想在第一个数据框后附加一列,这是“死亡之城”的相应邮政编码。实现这一目标的最佳方法是什么?我试着做了

pd.merge(df1, df2, left_on='Death City', right_on='City', how='outer') 

但它正在返回一个更大的数据框架。我只想要附加邮政编码的df1的值。谢谢!

3 个答案:

答案 0 :(得分:2)

您似乎需要在merge中加入左键:

pd.merge(df1, df2, left_on='Death City', right_on='City', how='left') 

最好的是在pandas documentation中解释。

答案 1 :(得分:1)

如果您只想添加一列,我会使用Series.map(),否则请使用pd.merge()

df1['Zip Code'] = df1['Death City'].map(df2.set_index('City')['Zip Code'])

答案 2 :(得分:0)

import pandas as pd
d = {'Death City' : pd.Series(['city1', 'city1', 'city2','city3']),
 'column2' : pd.Series([1., 2., 3., 4.])}

df1 = pd.DataFrame(d)
d = {'city' : pd.Series(['city1', 'city2','city3','city4']),
 'zipcode' : pd.Series([11111,2222, 3333., 44444])}

df2 = pd.DataFrame(d)

所以在这个例子中:df1有3个独特的死亡城市,4行和第2列。 df2有4个城市和4个zipcodes。

df1a=df1.drop_duplicates(['Death City'])

如果你想获得独特的“死亡城市”,那么首先从df1中删除重复的邮政编码组合,以便你有3个独特的行

df_merged=pd.merge(df1a,df2,left_on='Death City',right_on='city')

然后在df1.'Death City'= df2.city上将df2连接到df1然后删除冗余的城市列。

df_merged=df_merged[['Death City','zipcode']]