首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用相似数据合并2只熊猫的数据

使用相似数据合并2只熊猫的数据
EN

Stack Overflow用户
提问于 2018-06-29 07:44:20
回答 2查看 47关注 0票数 2

我找不到一个优雅的解决方案来合并这两个数据集:

假设我有第一个数据集,里面有城市的温度

代码语言:javascript
复制
       2016 2017
cityA   23  27
cityB   24  28

另一个有很多信息,但看起来是这样的:

代码语言:javascript
复制
    city    year    other
0   cityA   2016    aa
1   cityB   2017    bb
2   cityA   2016    cc
3   cityB   2017    dd

我希望得到以下结果:

代码语言:javascript
复制
     city  year other  temperatures
0   cityA   2016    aa    23
1   cityB   2017    bb    28
2   cityA   2016    cc    23
3   cityB   2017    dd    24

谢谢你的帮忙!

编辑:真实和更复杂的数据文件:

数据1与温度

dataframe 2与其他数据:

答案的执行结果:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-29 07:49:35

使用stackreset_index进行重组,然后使用merge,我认为在左联接时:

代码语言:javascript
复制
df11 = df1.stack().reset_index()
df11.columns = ['city','year','temperatures']
#if years are strings convert to integers
df11['year'] = df11['year'].astype(int)

df = df2.merge(df11, on=['city','year'], how='left')
print (df)
    city  year other  temperatures
0  cityA  2016    aa            23
1  cityB  2017    bb            28
2  cityA  2016    cc            23
3  cityB  2017    dd            28
票数 2
EN

Stack Overflow用户

发布于 2018-06-29 08:11:27

熔融+合并

您可以熔化您的“旋转”数据,然后左与您的主数据合并。假设您的第一个dataframe中的年份列是整数。

代码语言:javascript
复制
melted = pd.melt(df1.reset_index(), id_vars='index')

res = df2.merge(melted, left_on=['city', 'year'],
                right_on=['index', 'variable'], how='left')

print(res[['city', 'year', 'other', 'value']])

    city  year other  value
0  cityA  2016    aa     23
1  cityB  2017    bb     28
2  cityA  2016    cc     23
3  cityB  2017    dd     28
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51096736

复制
相关文章

相似问题

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