我试图加入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
巴西|足球|美国广播公司联邦大学
可以使用数据框来完成,或者我需要使用其他库吗?
因此,有大量数据,例如数百万的数据。
任何人都可以帮助我或者给我一个解决问题的建议吗?
非常感谢!
答案 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_id
是sport_id
和university_id
之间唯一的链接。