将数据帧透视到三维阵列中

2024-06-15 00:40:57 发布

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

我想扩展我现有的代码,这样我就可以在绘图中添加另一个维度(semi-3D->;semi-4D)

我当前的代码如下所示:

df = df[(['T_id'] == 3)]  # Pick just t_id = 3 data

df_grouped = df.groupby(['Timestamp', 'Pos_id'], as_index = False)[['Error']]
  
df_sum = df_grouped .agg('sum').pivot('Timestamp', 'Pos_id')["Error"] # Counting all errors
df_count = df_grouped .agg('count').pivot('Timestamp', 'Pos_id')["Error"] # Counting all entries
df_error_rate = df_date_sum.div(df_count) # err_rate = errors / total
df_error_rate = df_date_error_rate.fillna(0)

fig, ax = plt.pyplot.subplots()
sns.heatmap(df_error_rate.T)

上面的代码将错误率绘制为热图,其中x轴表示时间轴(“时间戳”),y轴表示位置(“位置id”),颜色表示错误率(df_日期错误率-0%-100%)

本例仅针对T_id=3(代码中的第一行)进行打印,但我希望删除第一行,为T_id添加另一个维度,并对所有可用的T_id进行相同的计算

热图将具有以下维度:

  Axis  | Old          |  New
--------+--------------+-------------
  X     | Timestamp    | Timestamp
  Y     | Pos_id       | Pos_id
  Z     | not existing | T_id
  Color | error_rate   | error_rate

创建三维热图有不同的方法,如:

我目前的问题是创建新的透视表。作为第一种天真的方法,我只是在pivot命令中添加了“T_id”:

df_grouped = df.groupby(['Timestamp', 'T_id', 'Pos_id'], as_index = False)[['Error']]
df_sum = df_grouped .agg('sum').pivot('Timestamp', 'T_id', 'Pos_id')["Error"]
df_count = df_grouped .agg('count').pivot('Timestamp', 'T_id', 'Pos_id')["Error"]
df_error_rate = df_date_sum.div(df_count)
# …

但这并不奏效

我想pivot不适合这个。我怎么做


Tags: 代码posiddfdateratecounterror