绘制基于行的数据

Plotting row based data

我有一些数据看起来像这样:

df =

id      period    15-nov    16-nov    17-nov    18-nov
------------------------------------------------------
vodka   night     1         2         3         1
vodka   day       0         1         2         0
vodka   evening   1         2         2         0
rum     night     1         2         3         3
rum     day       1         2         2         0
rum     evening   1         3         2         1

我想做的是绘制 header 日期的值,但按 ID 和时间段分组。所以基本上这将变成 6 条线图,x-axis 作为日期给出。

然而,也许我只是累了,但我觉得这个数据集很奇怪地放在一起,所以我通常的 groupby 东西不起作用,因为只有一些 header 是x-axis 个值。我正在考虑将日期列转换为一个列,然后将日期 headers 添加为另一列,总共有 4 列 - 但行数更多,然后使用 groupby 函数。但我想不出任何聪明的方法来做到这一点,接受也许是手动的。

这就是我要走的路,还是我错过了一个简单的转换技巧?

您可以使用 melt 反转数据框,然后使用 seaborn 绘制线条:

import seaborn as sns

df_melted = df.melt(value_vars=['15-nov', '16-nov', '17-nov', '18-nov'], 
                    id_vars=['id', 'period'], 
                    var_name='date'
                   )

sns.lineplot(data=df_melted.sort_values('date'), 
             x='date', y='value', 
             hue=df_melted['id'] + '_' + df_melted['period']
            )

输出: