如何重新组合或重新排列数据以构建堆叠条形图?

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

我有一个数据框,全部在一行中,其中有多列值,我需要重新排列它们以制作一个堆叠的条形图(最好使用绘图)。数据样本如下:

Car 1 Fastest Time | Car 1 Slowest Time | Car 1 End Time | Car 2 Fastest Time | Car 2 Slowest Time | Car 2 End Time | Car 3 Fastest Time | Car 3 Slowest Time | Car 3 End Time  

我想重新排列数据并制作一个 3 列的条形图,其中最快、最慢和结束时间都在每个车号的一列中。

我尝试重新组合数据、拆分数据,但没有成功。我对熊猫很陌生

pandas dataframe plotly
1个回答
0
投票

单行的 DataFrame 不容易使用,因此您需要稍微重新排列一下:为了简单起见,我将把您的 DataFrame 设为长格式,其中每个数据点都是单行(因为您有三辆车,每辆车有 3 个观测值,总共 9 行)。

import pandas as pd
import plotly.express as px

df = pd.DataFrame({
    'Car 1 Fastest Time': [55.0],
    'Car 1 Slowest Time': [90.0],
    'Car 1 End Time': [60.0],
    'Car 2 Fastest Time': [60.0],
    'Car 2 Slowest Time': [80.0],
    'Car 2 End Time': [70.0],
    'Car 3 Fastest Time': [70.0],
    'Car 3 Slowest Time': [90.0],
    'Car 3 End Time': [80.0]
})

df_long = df.T.reset_index().rename(columns={'index': 'category', 0: 'Time'})
df_long['TimeCategory'] = df_long['category'].str.split(' ',expand=True)[2]
df_long['Car'] = df_long['category'].str.split(' ',expand=True)[[0,1]].agg(' '.join, axis=1)

df_long
如下所示:

             category  Time TimeCategory    Car
0  Car 1 Fastest Time  55.0      Fastest  Car 1
1  Car 1 Slowest Time  90.0      Slowest  Car 1
2      Car 1 End Time  60.0          End  Car 1
3  Car 2 Fastest Time  60.0      Fastest  Car 2
4  Car 2 Slowest Time  80.0      Slowest  Car 2
5      Car 2 End Time  70.0          End  Car 2
6  Car 3 Fastest Time  70.0      Fastest  Car 3
7  Car 3 Slowest Time  90.0      Slowest  Car 3
8      Car 3 End Time  80.0          End  Car 3

我们现在可以使用

px.bar
并传递长格式 DataFrame 以及每个时间类别(最快、最慢、结束)所需的值和颜色。 Plotly 还有一些有用的文档[此处]。(https://plotly.com/python/bar-charts/#bar-charts-with-long-format-data)

fig = px.bar(df_long, x='Car', y='Time', color='TimeCategory')
fig.show()

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