我有一个数据框,全部在一行中,其中有多列值,我需要重新排列它们以制作一个堆叠的条形图(最好使用绘图)。数据样本如下:
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 列的条形图,其中最快、最慢和结束时间都在每个车号的一列中。
我尝试重新组合数据、拆分数据,但没有成功。我对熊猫很陌生
单行的 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()