首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有内部交叉的情况下合并3个数据帧的最佳方法是什么(数据科学课程3)

在没有内部交叉的情况下合并3个数据帧的最佳方法是什么(数据科学课程3)
EN

Stack Overflow用户
提问于 2020-08-15 07:53:48
回答 1查看 1K关注 0票数 0

我正在努力解决Introduction to data science on coursera的作业3。在完成了第一个问题(基本上是清理和合并数据帧)之后,我们转到了问题2。

Question 1打算合并三个数据帧:

第一个df是关于每个国家的能源(227个基于国家的countries);

  • GDP表,以及(264)基于国家的

  • 排名表(191个排名,每个国家1排名)

他们要求我们只合并这三个数据框架,以县为指标,只考虑前15个级别,这是很好的。

第二个问题是,当我们根据前15级合并3个表时损失了多少行:

--前面的问题--加入了三个数据集,然后将其简化为前15个条目。当您加入数据集时,但在将其简化为前15项之前,您丢失了多少项?

这个函数应该返回一个数字。

我所做的解决方法是使用以下方法合并GDPEnergy表:

代码语言:javascript
复制
energy_gdp = pd.merge(energy, GDP, how='inner', right_on='Country', left_on='Country')
print(len(energy_gdp))

从GDP中返回264行中的186项,从能源表中返回227行。

然后,我将energy_gdpScimEn合并,但没有前15位:

代码语言:javascript
复制
ScimEn = ScimEn[15:]

和:

代码语言:javascript
复制
df = pd.merge(ScimEn, Energy_GDP_df, left_on='Country', right_on='Country', how='inner')
return len(df)

结果是147行。

在网上搜索解决方案时,结果是156

我做了以下工作,以确保我的答案是正确的:

代码语言:javascript
复制
ScimEn_initial = ScimEn[:15] # Took only the first 15 ranks
df_initial = pd.merge(ScimEn_initial, Energy_GDP_df, left_on='Country', right_on='Country', how='inner')

# ScimEn = ScimEn[15:]

df = pd.merge(ScimEn, Energy_GDP_df, left_on='Country', right_on='Country', how='inner')

return len(df)-len(df_initial)

一共有147个条目。

我在堆栈溢出时查看了这个post,但是没有显示答案。

这是合并三个数据帧但它们的内部交叉的正确方式吗?

根据赋值一般规则,我们可以在堆栈溢出流上搜索或发布解决方案:

这个作业需要更多的个人学习,而不是上一个--我们鼓励你查阅大熊猫文档,找出你可能还没有使用过的函数或方法,或者问一些关于堆栈溢出的问题,并将它们标记为熊猫和蟒蛇相关的。当然,讨论论坛是开放的,可以与您的同行和课程工作人员进行互动。

EN

回答 1

Stack Overflow用户

发布于 2021-08-20 17:27:27

我知道为时已晚,但可能会对别人有帮助。

代码语言:javascript
复制
def answer_one():
    energy = pd.read_excel('Energy+Indicators.xls')
    energy = energy[17:244].reset_index(drop=True)
    energy.drop(energy.columns[0:2], axis=1, inplace=True)
    energy.rename(columns={energy.columns[0]:'Country', energy.columns[1]:'Energy Supply', energy.columns[2]:'Energy Supply per Capita', energy.columns[3]:'% Renewable'}, inplace=True)
    energy.replace('...', np.NaN, inplace=True)
    energy['Energy Supply'] = energy['Energy Supply'] * 1000000
    energy['Country'] = energy['Country'].str.replace('\d+','')
    replacement1 = {"Republic of Korea": "South Korea", "United States of America": "United States", "United Kingdom of Great Britain and Northern Ireland": "United Kingdom", "China, Hong Kong Special Administrative Region": "Hong Kong"}
    energy['Country'].replace(replacement1, inplace=True)
    energy['Country'] = energy['Country'].str.replace(r" \(.*\)","")
    GDP = pd.read_csv('world_bank.csv', skiprows=4)
    GDP.rename(columns={'Country Name':'Country'}, inplace=True)
    replacement2 = {"Korea, Rep.": "South Korea", "Iran, Islamic Rep.": "Iran", "Hong Kong SAR, China": "Hong Kong"}
    GDP['Country'].replace(replacement2, inplace=True)
    ScimEn = pd.read_excel('scimagojr-3.xlsx')
    GDP_last10_years = GDP.drop(GDP.columns[4:-10], axis=1)
    merged_df1 = pd.merge(left=ScimEn, right=GDP_last10_years, how='left', left_on='Country', right_on='Country')
    merged_all_df_big = pd.merge(left=merged_df1, right=energy, how='left', left_on='Country', right_on='Country')
    merged_all_df = merged_all_df_big.head(15)
    remove_cols = ['Country Code', 'Indicator Name', 'Indicator Code']
    merged_all_df.drop(remove_cols, axis=1, inplace=True)
    merged_all_df.set_index('Country', inplace=True)
    return merged_all_df
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63423820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档