如何在pandas中加入两个或多个DataFrame,python

时间:2016-01-18 12:14:46

标签: python pandas

我试图加入3个数据帧,但是我遇到了问题。让我展示一下这个场景。

我有3个数据帧:

首先:国家/地区

只有两列: Country_ID,Country_Name 主键: Country_ID

Country_ID |的 COUNTRY_NAME

BR     |   Brazil

第二:体育

只有三列:国家/地区ID,Sport_ID,Sport_Name 主键: Country_ID,Sport_ID

Country_ID |的 Sport_ID |的 Sport_Name

BR         |    1234     |     Football

第三名:大学

只有四列: Country_ID,University_ID,University_Name 主键: Country_ID,University_ID

Country_ID |的 University_ID |的 UNIVERSITY_NAME

BR         |    UFCABC        | Federal University of ABC

最终结果:只有以下列: Country_Name,Sport_Name,University_Name

Country_Name | Sport_Name |的 UNIVERSITY_NAME

巴西|足球|巴西联邦大学

我尝试加入ContryXSport,然后加入大学DataFrame,但我无法做到。

以下是创建和加入数据帧的代码:

country_raw_data = {
            'country_id': [country.id for country in countries],
            'country_name': [country.name for country in countries]                                  }

sport_raw_data = {
            'country_id': [sport.country.id for sport in sports],                
            'sport_id': [sport.id for sport in sports],
            'sport_name': [sport.name for sport in sports]
        }

university_raw_data = {
            'country_id': [university.country.id for university in universities],                
            'university_id': [university.state.id for university in universities],
            'university_name': [university.name for university in universities]
        }

现在,数据框实例:

我尝试像这样创建df:

country_df = pd.DataFrame(country_raw_data, columns: ['country_id', 'country_name'])

我不知道为什么,country_df创建错误,某些列在正确的值下显示不正确。然后我必须像这样创造,它正在发挥作用。

country_df = pd.DataFrame(country_raw_data) 
sport_df = pd.DataFrame(sport_raw_data) 
university_df = pd.DataFrame(university_raw_data) 

这里是连接声明:

我试图这样做,但结果没有正确加入。有些列未正确包含数据框。

country_state_df = pd.merge(country_df, state_df, on='country_id', how='inner')

我做了另一个代码,但之前我遇到了同样的问题:

country_sport_df = pd.merge(country_df, sport_df, 
                        left_on='country_id', 
                        right_on='sport_id', 
                        how='inner')

所以,在第一次加入之后,我在country_state与city

之间进行了下一次加入
country_sport_university.df = pd.merge(country_sport_df, university_df, 
                             on=['country_id', 'country_id'], 
                             how='inner')

我希望最终结果必须像这些列:

country_name | Sport_Name |的 UNIVERSITY_NAME

巴西|足球|美国广播公司联邦大学

可以使用数据框来完成,或者我需要使用其他库吗?

因此,有大量数据,例如数百万的数据。

任何人都可以帮助我或者给我一个解决问题的建议吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

你应该能够:

country_sport_df = country_df.merge(sport_df, on='country_id', how='inner')
country_university_df = university_df.merge(sport_df, on='country_id', how='inner').drop(['country_id', 'sport_id', 'university_id'], axis=1)

我认为country_idsport_iduniversity_id之间唯一的链接。