如何用Python从时间序列数据生成符合要求的二维数组?
问题描述
我有一个含4列的大型时间序列数据集:Time A B C。希望从中生成一个新的二维数组,要求如下:
- 行数由A的唯一值数量(x轴)决定,列数由B的唯一值数量(y轴)决定
- 行列值按升序排列,单元格填充对应的C值(z轴)
- 无对应值时填充
None,存在多个对应值时填充平均值
背景说明:想用这些数据通过Plotly绘制等高线图,需尽量减少该类图表固有的插值操作,None值将显示为空白。同时需要为A(x轴)和B(y轴)定义对应的二维数组,想知道是否有Python函数可轻松实现此需求,无需手动指定唯一值数量。
解决方案(已验证可行)
最终使用pandas的pivot_table函数,通过aggfunc参数设置重复值的处理方式,代码如下:
import pandas as pd import numpy as np import plotly.graph_objects as go pivot_table = pd.pivot_table(df, values='C', index='B', columns='A', aggfunc=np.mean) z_values = pivot_table.values x_values = pivot_table.columns.values y_values = pivot_table.index.values self.fig.add_trace(go.Contour(x=x_values, y=y_values, z=z_values, connectgaps=False))
说明:
pd.pivot_table会自动按A、B的唯一值升序排列生成二维表,缺失值默认填充NaN(Plotly会将其识别为空白,和需求的None效果一致)aggfunc=np.mean实现了多值取平均的要求- 直接从透视表中提取
columns、index和values即可得到Plotly等高线图所需的x、y、z数组
内容的提问来源于stack exchange,提问作者Iceberg_Slim
相关产品推荐
相关产品推荐

