如何将 DataFrame 的多行转换为单列?

问题描述 投票:0回答:1

我得到了一个数据框,其中记录了观察结果,如下图所示:

DataFrame Snippet

本质上,Dataframe 具有与年、月、测量类型(称为元素)和 1-31 天相对应的列。需要澄清的是,正好有 31 个“日”列来跟踪一个月中的天数。如果特定月份少于 31 天,多余的日期列将包含 NaN 条目。我被要求重构 Dataframe,使其只有七列:年、月、日、日期(作为日期时间对象)、tmin、tmax 和 prcp(三种测量类型)。我无法找到一种方法来做到这一点 - 似乎应该有一个简单的解决方案。

到目前为止,我已经使用 .groupby() 创建了不同的数据帧,其中包含与 tmin、tmax 和 prcp 对应的行。我似乎找不到一种好方法将这些分组数据帧中的数据转换为可以作为列添加到新数据帧的系列。我可以使用列表理解来创建每行所有观察值的嵌套列表,但问题是并非每个测量类型(tmin、tmax、prcp)都具有相同数量的观察值,因此如果我需要保留空观察值想要构建一个数据框。

python dataframe data-science
1个回答
0
投票

在这种情况下,如果您不想接触标识符列并将多列变成单列,您可以使用

pandas.melt()
方法。熔化方法的作用基本上是将宽数据帧变成长数据帧。假设您的数据框是 df。这是您的案例的一个例子:

id_vars = ['year', 'month', 'element']
#we don't want melt to touch identifiers

#use melt method with non-identifier columns
df = df.melt(id_vars=id_vars, var_name='Day', value_name='Value')

我前几天也遇到了同样的问题。请小心,因为这会增加数据框中的行数。

© www.soinside.com 2019 - 2024. All rights reserved.