首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用熊猫合并两种不同结构的数据

利用熊猫合并两种不同结构的数据
EN

Stack Overflow用户
提问于 2019-08-08 13:29:49
回答 1查看 214关注 0票数 0

我需要将数据从一个数据合并到另一个数据。主要数据由具有年份、月份和区域变量的调查答案组成。我需要合并到这上面的数据是那个特定月份的天气数据。这些数据存储在我的第二个气象站的数据框架中,其中有一个年变量,即每个月的平均温度变量(例如。value1,value2,。( value12)和一个区域变量。

我尝试将这两个数据在区域和年份上合并,然后我的计划是选择与调查相吻合的平均温度变量。

代码语言:javascript
复制
df1
---------------------------
year  month     regions
2002  january   Pais Vasco
2002  february  Pais Vasco 
2003  march     Pais Vasco 
2002  november  Florida
2003  december  Florida
...   ...      ...
---------------------------

df2
-----------------------------------------------
year  value1  value2  ...  value12  regions
2002  10      11      ...  9        Pais Vasco
2003  11      11      ...  10       Pais Vasco
2004  12      11      ...  10       Pais Vasco
2002  11      11      ...  9        Florida
2003  10      11      ...  9        Florida
-----------------------------------------------

因此,在这个例子中,我需要进行我的第一次观测,从Pais地区和2002年获得相应的温度(value1)数据。

当我试图与

代码语言:javascript
复制
df_merged = pd.merge(df1, df2, how = "left", on =["regions", "year"])

我得到的数据比我最初的调查数据要多得多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-08 13:41:29

我将这些数据转换为整洁格式。假设value1value2等对应于valuemonth,然后使用pd.wide_to_long将其转换为长整洁的格式,然后合并。

代码语言:javascript
复制
tidy = pd.wide_to_long(df, stubnames=['value'], i=['year', 'region'], j='month', sep='') \
    .reset_index()

你需要规范你的月份,这样它们要么是数字,要么是整数。你是如何做到这一点的,超出了这个答案的范围。

然后,

代码语言:javascript
复制
df1.merge(tidy, on=['year', 'month', 'region'], how='left', validate='1:1')

如果这会引发错误,那么您将对同一个['year', 'month', 'region']键进行多个观察。通过丢弃副本来解决这个问题。您如何这样做几乎肯定是基于您的数据。

sobek注意到您的合并命令中有一个错误,即'regions'而不是'region'。确保您所指的是实际存在的列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57413812

复制
相关文章

相似问题

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