在R语言中按日期站点分组将物种列表长转宽并求温度均值
解决方案:Pandas 实现分组均值计算 + 宽格式转换
情况1:原始数据为长格式(变量名单独一列)
假设你的原始数据结构示例:
| date | site | variable | value |
|---|---|---|---|
| 2023-01-01 | A | temperature | 22.5 |
| 2023-01-01 | A | cloud_cover | 0.3 |
| 2023-01-01 | B | temperature | 20.1 |
| 2023-01-02 | A | temperature | 23.0 |
代码实现
import pandas as pd # 读取数据(替换为你的实际数据路径) df = pd.read_csv("your_data.csv") # 按日期、站点、变量分组计算均值 grouped_mean = df.groupby(["date", "site", "variable"])["value"].mean().reset_index() # 转换为宽格式:变量名作为列,对应均值为单元格值 wide_df = grouped_mean.pivot(index=["date", "site"], columns="variable", values="value").reset_index() # 清理列名(可选,移除自动生成的层级前缀) wide_df.columns = wide_df.columns.str.replace(r"^variable_", "", regex=True) # 查看最终结果 print(wide_df)
情况2:原始数据为长格式(变量已作为单独列)
如果你的原始数据已将温度、云量等设为独立列,示例:
| date | site | temperature | cloud_cover |
|---|---|---|---|
| 2023-01-01 | A | 22.5 | 0.3 |
| 2023-01-01 | A | 22.8 | 0.25 |
| 2023-01-01 | B | 20.1 | 0.5 |
| 2023-01-02 | A | 23.0 | 0.4 |
代码实现
import pandas as pd df = pd.read_csv("your_data.csv") # 直接按日期+站点分组,对所有数值列计算均值 wide_df = df.groupby(["date", "site"]).mean().reset_index() # 查看最终结果 print(wide_df)
关键说明
groupby(["date", "site"]):核心分组逻辑,确保每组对应同一日期+同一站点的数据集- 若只需计算指定变量的均值,可替换为
agg({"temperature": "mean", "cloud_cover": "mean"})精准指定 pivot():完成长格式到宽格式的转换,自动将变量名映射为列名
内容的提问来源于stack exchange,提问作者CrazyBirdLady
相关产品推荐
相关产品推荐

