python - 在 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")
我想使用重要性数据来:对线条着色/加粗,或者将图形拆分为多个图形,所以它看起来像这样
解决方案
您可以MultiIndex
在列上制作一个,然后堆叠两个级别。
# Map color to importance
d = (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 10
df = df.rename_axis(index='index').stack([0,1]).to_frame('value').reset_index()
index color importance value
0 0 Blue 0 1.0
1 0 Green 1 2.0
2 0 Orange 2 0.0
3 1 Blue 0 4.0
4 1 Green 1 4.0
5 1 Orange 2 2.0
6 2 Blue 0 10.0
7 2 Green 1 3.0
8 2 Orange 2 1.0
推荐阅读
- javascript - express-generator 中的家庭路由器“/”在某处被覆盖,或者它只是不工作。为什么?
- python-datetime - 将第二个数据帧的一部分重新采样为每半秒
- laravel - 堆栈字段未显示在 Laravel Nova 的创建/编辑页面中
- c# - 我正在尝试将两个文件作为列表或数组导入,然后比较列表一中的所有内容都在列表二中
- reactjs - react-select:在onChange期间从另一个Select清除所选值
- linux - 查找文本文件中的所有时间戳,并使用 SED 或 AWK linux 将此时间戳转换为 (UTC-5)
- sql - (Databricks SQL) 存储为 STRING (yyyyMMDD) 的日期无法将其转换为 DATE (yyyy-MM-DD)
- python - 是否可以从芹菜链返回累积的结果?
- docker - 如何授予非 root 用户对 kubernetes SBM flexvolume 挂载的写入权限?
- flutter - 现在哪些小部件现在显示在列表中