我需要将数据从一个数据帧合并到另一个数据帧。 主要数据框由具有年,月和区域变量的调查答案组成。 我需要合并的数据是该特定月份的天气数据。这些数据存储在我的第二个气象站数据框中,其中包含年变量,每个月的平均温度变量(例如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"])
我得到的数据框比原始调查数据框具有更多的观测值。
答案 0 :(得分:0)
我将此数据转换为tidy格式。假设value1
,value2
等对应于value
和month
,然后使用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'
。确保您引用的是实际存在的列。