使用熊猫合并具有不同结构的两个数据框

时间:2019-08-08 13:29:49

标签: python pandas dataframe

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

我试图合并区域和年份这两个数据框,然后我的计划是随后选择与调查相符的平均温度变量。

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 Vasco地区和2002年获得相应的温度(值1)数据。

当我尝试与之合并

df_merged = pd.merge(df1, df2, how = "left", on =["regions", "year"])

我得到的数据框比原始调查数据框具有更多的观测值。

1 个答案:

答案 0 :(得分:0)

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

tidy = pd.wide_to_long(df, stubnames=['value'], i=['year', 'region'], j='month', sep='') \
    .reset_index()

您需要对月份进行归一化,以便它们都是数字或整数。您如何执行此操作超出了此答案的范围。

然后

df1.merge(tidy, on=['year', 'month', 'region'], how='left', validate='1:1')

如果这引发了错误,则对于相同的['year', 'month', 'region']键,您会有多个观察结果。通过删除重复项来解决此问题。几乎可以肯定,您的操作方式很大程度上取决于您的数据。


sobek注意到您有错别字,在合并命令中说'regions'而不是'region'。确保您引用的是实际存在的列。