pandas.melt 之后保留列索引吗?

我有一个数据框,其值随时间变化。例如,我在街道上观察到的汽车数量:


df = pd.DataFrame(

    [{'Orange': 0, 'Green': 2, 'Blue': 1},

     {'Orange': 2, 'Green': 4, 'Blue': 4},

     {'Orange': 1, 'Green': 3, 'Blue': 10}

    ])

我想创建图表来突出显示价值最高的汽车。所以我按最大值排序。


df.loc[:, df.max().sort_values(ascending=False).index]

   Blue  Green  Orange

0     1      2       0

1     4      4       2

2    10      3       1

我正在使用seaborn 来创建这些图表。据我了解,我需要将这种表示形式融合为整洁的格式。


tidy = pd.melt(df.reset_index(), id_vars=['index'], var_name='color', value_name='number')

   index   color  number

0      0    Blue      1

1      1    Blue      4

2      2    Blue     10

3      0   Green      2

4      1   Green      4

5      2   Green      3

6      0  Orange      0

7      1  Orange      2

8      2  Orange      1

如何在数据框熔化之前添加代表列顺序的列?


   index   color  number   importance

0      0    Blue      1            0

1      1    Blue      4            0

2      2    Blue     10            0

3      0   Green      2            1

4      1   Green      4            1

5      2   Green      3            1

6      0  Orange      0            2 

7      1  Orange      2            2

8      2  Orange      1            2

我发现熔化后仍然可以找到最大列,但我不确定如何将其作为新列添加到数据框中:


tidy.groupby('color').number.max().sort_values(ascending=False).index

Index(['Blue', 'Green', 'Orange'], dtype='object', name='color')

编辑 为了澄清,我将其绘制在折线图上。


axes = sns.relplot(data=tidy, x='index', y='number', hue='color', kind="line")

图表目前的样子是这样的:

http://img.mukewang.com/64a4cee70001e7bf06090499.jpg

我想使用重要性数据来:对线条进行颜色/加粗,或者将图形拆分为多个图形,所以它看起来像这样

http://img3.mukewang.com/64a4cefc000161c303240159.jpg


长风秋雁
浏览 78回答 2
2回答

互换的青春

MultiIndex您可以在柱子上制作一个,然后将两层堆叠起来。# Map color to importanced = (df.max().rank(method='dense', ascending=False)-1).astype(int)df.columns = pd.MultiIndex.from_arrays([df.columns, df.columns.map(d)],                                       names=['color', 'importance'])#color      Orange Green Blue#importance      2     1    0#0               0     2    1#1               2     4    4#2               1     3   10df = df.rename_axis(index='index').stack([0,1]).to_frame('value').reset_index()   index   color  importance  value0      0    Blue           0    1.01      0   Green           1    2.02      0  Orange           2    0.03      1    Blue           0    4.04      1   Green           1    4.05      1  Orange           2    2.06      2    Blue           0   10.07      2   Green           1    3.08      2  Orange           2    1.0

qq_遁去的一_1

另一个选项建立在您拥有的熔化基础上,并稍后导出重要性列:tidy["importance"] = tidy["color"].map(df.columns.to_list().index)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python