【发布时间】:2019-12-31 16:59:21
【问题描述】:
给定一个具有以下结构的 DataFrame:
Date | Site | Measurement Type | Value
-----------------------------------------------
1/1/2020 | A | Temperature | 32.3
1/2/2020 | B | Humidity | 70%
我想创建一个 3D“数据透视表”,其中第一个轴代表站点,第二个轴代表日期,第三个代表测量类型,并且值存储在每个元素中。
例如,如果我在 5 个地点进行为期一周的每日测量,同时测量温度和湿度,则所需的输出将是形状为 (5, 7, 2) 的数组。
Pandas 似乎只支持创建 2D 数据透视表,但我很高兴只使用一个未标记的 3D numpy 数组作为输出。在我花时间自己实施之前,想知道是否有现有的简单方法可以做到这一点。
【问题讨论】:
-
这听起来像是使用 MultiIndex 进行的基本旋转。这就是为什么发布预期输出也很重要的原因,因为您可以通过多种方式解决此问题。
-
类似
pd.crosstab(df.Date,columns=[df['Measurement Type'],df['Site']],values=df['Value'],aggfunc='first')? -
@Erfan 查看编辑 - 这是否阐明了所需的输出结构?
-
你让这件事变得比我认为的更困难。 3d 数组很难阅读。 Pandas 使用
MultiIndex解决了这个问题,您可以使用它来实现多维。试试这个代码:df.pivot_table(index='Date', columns=['Site', 'Measurement Type'], values='Value', aggfunc=lambda x: x) -
@Erfan 我需要 3D 结构,因为我正在为 Tensorflow 中的 RNN 训练转换数据。请参阅diagram in this tutorial for the desired structure 我同意 MultiIndex 的可读性更好。
标签: python pandas numpy pivot-table