2024-05-29 04:43:31 发布
网友
我正在使用pandas数据框中的气候数据,该数据框目前采用宽表格式,其中每行表示特定区域的一年数据,每周变量在列中
是否有一种方法可以转换该表,以便有一个额外的“week”列,并且每周的变量值都列在这些列中
例如,我的表当前看起来像这样,其中变量后缀表示周数:
但我希望生成的表如下所示:
我已经尝试在整个数据帧上使用pd.melt(),但是结果表不是我想要的
pd.melt()
让我们将初始数据帧命名为dfso。下面的代码将使用melt执行您想要的操作:
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中的评论
dft["Week"] = dft["Week"].str.replace("max_temp", "")
dft["Week"].apply(lambda x: x.replace("max_temp", ""))
max_temp
另一个选择(感谢对该问题的评论)可以是:
result = pd.wide_to_long( dfso, i=["ID", "Year"], stubnames=["precip", "max_temp"], j="Week", suffix="." ).reset_index()
让我们将初始数据帧命名为
dfso
。下面的代码将使用melt
执行您想要的操作:更新:
使用
dft["Week"] = dft["Week"].str.replace("max_temp", "")
而不是更快的dft["Week"].apply(lambda x: x.replace("max_temp", ""))
(这是max_temp
情况,但适用于两种转换)。感谢您在回复@tdy中的评论另一个选择(感谢对该问题的评论)可以是:
相关问题 更多 >
编程相关推荐