使用pandas合并两个不同结构的数据帧

2024-04-26 09:35:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将数据从一个数据帧合并到另一个数据帧。 主数据框由带有年、月和地区变量的调查答案组成。 我需要合并的数据是那个月的天气数据。这些数据存储在我的第二个气象站数据框中,其中包含一个年份变量,即每个月的平均温度变量(例如,值1、值2、。。。值12)和区域变量。你知道吗

我试着将地区和年份的两个数据框合并,然后我的计划是选择与调查相符的平均温度变量。你知道吗

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"])

我只是得到一个比我原来的调查数据框有更多观察的数据框。你知道吗


Tags: 数据答案year地区df1天气df2年份
1条回答
网友
1楼 · 发布于 2024-04-26 09:35:31

我将这些数据转换成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注意到您有一个输入错误,在merge命令中说的是'regions',而不是'region'。确保引用的是实际存在的列。你知道吗

相关问题 更多 >