将年宽表转换为周长表

2024-05-29 04:43:31 发布

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

我正在使用pandas数据框中的气候数据,该数据框目前采用宽表格式,其中每行表示特定区域的一年数据,每周变量在列中

是否有一种方法可以转换该表,以便有一个额外的“week”列,并且每周的变量值都列在这些列中


例如,我的表当前看起来像这样,其中变量后缀表示周数:

^{tb1}$

但我希望生成的表如下所示:

^{tb2}$

我已经尝试在整个数据帧上使用pd.melt(),但是结果表不是我想要的


Tags: 数据方法区域pandas格式后缀pd气候
1条回答
网友
1楼 · 发布于 2024-05-29 04:43:31

让我们将初始数据帧命名为dfso。下面的代码将使用melt执行您想要的操作:

# Unpivot precipitation columns
dfp = dfso[["ID", "Year", "precip1", "precip2", "precip3"]].melt(["ID", "Year"], var_name="Week", value_name="precip")
# Clean the Week column
dfp["Week"] = dfp["Week"].str.replace("precip", "")

# Unpivot max temperature columns
dft = dfso[["ID", "Year", "max_temp1", "max_temp2", "max_temp3"]].melt(["ID", "Year"], var_name="Week", value_name="max_temp")
# Clean the Week column
dft["Week"] = dft["Week"].str.replace("max_temp", "")

# Merge both for desired result
result = dfp.merge(dft, on=["ID", "Year", "Week"], how="inner")

更新:

使用dft["Week"] = dft["Week"].str.replace("max_temp", "")而不是更快的dft["Week"].apply(lambda x: x.replace("max_temp", ""))(这是max_temp情况,但适用于两种转换)。感谢您在回复@tdy中的评论

另一个选择(感谢对该问题的评论)可以是:

result = pd.wide_to_long(
    dfso,
    i=["ID", "Year"],
    stubnames=["precip", "max_temp"],
    j="Week",
    suffix="."
).reset_index()

相关问题 更多 >

    热门问题