如何在Pandas中拼接DataFrame?附气象数据分组处理场景
如何在Pandas中拼接DataFrame(针对你的气象数据场景)
首先,先帮你优化下现有代码里的小细节:你目前分组用的是未替换缺失值的data1,但已经把缺失值替换到了df2里,应该统一用df2来分组,不然计算均值时会包含-9999,结果会不准确哦。
最优方案:直接在分组时计算多列均值(避免后续拼接)
其实你完全可以在groupby一步就同时算出平均最低温和最高温,这样直接得到包含两列的DataFrame,不需要额外拼接操作,更高效:
import pandas as pd # 替换缺失值 df2 = data.replace(to_replace=-9999, value=0) # 按年份分组,同时计算MinTemp和MaxTemp的均值 annual_temp_stats = df2.groupby(df2.Date.str[:4])[['MinTemp', 'MaxTemp']].mean() # 输出结果会是: # MinTemp MaxTemp # Date # 1985 xxxx.xx 153.347945 # 1986 xxxx.xx ...
如果你已经分别生成了单列DataFrame,用以下方法拼接
假设你已经有了单独的平均最低温表tmp_min和平均最高温表tmp_max,可以用两种常用方式拼接:
方法1:用pd.concat()按列拼接
这种方式适合两个表的索引完全一致的情况(比如你的两个表索引都是年份):
# 先生成两个单列DataFrame tmp_max = df2.groupby(df2.Date.str[:4])['MaxTemp'].mean().to_frame() tmp_min = df2.groupby(df2.Date.str[:4])['MinTemp'].mean().to_frame() # 按列方向拼接,axis=1表示列合并 result = pd.concat([tmp_min, tmp_max], axis=1)
方法2:用merge()基于索引匹配拼接
如果两个表的索引是关联键(这里是年份),可以用merge指定按索引匹配:
result = tmp_min.merge(tmp_max, left_index=True, right_index=True)
这两种方法都能得到包含平均最低温和最高温的合并DataFrame,你可以根据自己的习惯选择。
内容的提问来源于stack exchange,提问作者akshayg21
相关产品推荐
相关产品推荐

