双同日期面板数据集处理:城市日均温差值计算函数咨询
嗨,针对你要合并两个日均温数据集并计算同一城市气温差值的需求,我推荐用Python的pandas库或者R的tidyverse工具集来实现,下面是具体的函数和操作步骤:
Python 实现(基于pandas库)
假设你的数据集是以CSV格式存储的,步骤如下:
- 首先导入pandas并读取两个数据集:
import pandas as pd # 读取数据集 df1 = pd.read_csv("dataset1.csv") df2 = pd.read_csv("dataset2.csv") - 从数据集2中提取每个城市(FUA_CODE)对应的主城市行(也就是每个FUA_CODE分组下的第一行,对应Milano、Roma这类核心城市):
# 按FUA_CODE分组,保留每个组的第一行(主城市数据) df2_main_cities = df2.groupby("FUA_CODE").first().reset_index() - 合并两个数据集,以
FUA_CODE为匹配键:# 合并时给两个数据集的日期列添加后缀,区分来源 merged_df = pd.merge(df1, df2_main_cities, on="FUA_CODE", suffixes=("_df1", "_df2")) - 计算每个日期的气温差值(或拼接成你想要的"原值 - 对比值"格式):
# 筛选所有日期列(列名包含日期格式的"-") date_columns = [col for col in df1.columns if "-" in col] # 方式1:计算数值差值 for col in date_columns: merged_df[col] = merged_df[f"{col}_df1"] - merged_df[f"{col}_df2"] # 方式2:拼接成"原值 - 对比值"的字符串格式(和你理想结果一致) for col in date_columns: merged_df[col] = merged_df[f"{col}_df1"].astype(str) + " - " + merged_df[f"{col}_df2"].astype(str) - 最后整理结果,保留需要的列:
# 保留FUA_CODE和所有日期列 final_result = merged_df[["FUA_CODE"] + date_columns]
R 实现(基于tidyverse工具集)
同样假设数据是CSV格式,步骤如下:
- 导入tidyverse并读取数据:
library(tidyverse) # 读取数据集 df1 <- read_csv("dataset1.csv") df2 <- read_csv("dataset2.csv") - 提取数据集2中的主城市行:
# 按FUA_CODE分组,取每个组的第一行 df2_main_cities <- df2 %>% group_by(FUA_CODE) %>% slice(1) %>% ungroup() - 合并两个数据集:
merged_df <- inner_join(df1, df2_main_cities, by = "FUA_CODE") - 计算差值或拼接字符串:
# 筛选日期列 date_columns <- colnames(df1)[str_detect(colnames(df1), "-")] # 方式1:计算数值差值 merged_df <- merged_df %>% mutate(across(all_of(date_columns), ~ .x.x - .x.y)) # 方式2:拼接成"原值 - 对比值"的字符串格式 merged_df <- merged_df %>% mutate(across(all_of(date_columns), ~ str_c(.x.x, " - ", .x.y))) - 整理最终结果:
final_result <- merged_df %>% select(FUA_CODE, all_of(date_columns))
注意事项
- 确保两个数据集的
FUA_CODE编码完全匹配,日期列的名称和数量一致; - 如果数据集2中主城市不是每个分组的第一行,可以通过字符串匹配(比如筛选城市名称不含"outside"的行)来提取;
- 如果存在缺失值,可以用
fillna()(Python)或replace_na()(R)提前处理。
内容的提问来源于stack exchange,提问作者nflore
相关产品推荐
相关产品推荐

