我正在尝试在seaborn中创建一个小提琴图.输入是pandas DataFrame,它看起来是为了沿x轴分离数据,我需要在单个列上进行区分.我目前有一个DataFrame,它具有几个传感器的浮点值:
>>>df.columns
Index('SensorA', 'SensorB', 'SensorC', 'SensorD', 'group_id')
也就是说,每个Sensor [A-Z]列均包含一堆数字:
>>>df['SensorA'].head()
0 0.072706
1 0.072698
2 0.072701
3 0.072303
4 0.071951
Name: SensorA, dtype: float64
对于这个问题,我只对2个小组感兴趣:
>>>df['group_id'].unique()
'1', '2'
我希望每个传感器在x轴上都是一个单独的小提琴.
我认为这意味着我需要将其转换为以下形式:
>>>df.columns
Index('Value', 'Sensor', 'group_id')
新数据帧中的“传感器”列包含文本“ SensorA”,“ SensorB”等,新数据帧中的“值”列包含每个Sensor [A-Z]列中的原始值,并保留组信息.
然后,我可以使用以下命令创建小提琴图:
ax = sns.violinplot(x="Sensor", y="Value", hue="group_id", data=df)
解决方法:
使用熊猫的融化功能
import pandas as pd
import numpy as np
df = pd.DataFrame({'SensorA':[1,3,4,5,6], 'SensorB':[5,2,3,6,7], 'SensorC':[7,4,8,1,10], 'group_id':[1,2,1,1,2]})
df = pd.melt(df, id_vars = 'group_id', var_name = 'Sensor')
print df
给
group_id Sensor value
0 1 SensorA 1
1 2 SensorA 3
2 1 SensorA 4
3 1 SensorA 5
4 2 SensorA 6
5 1 SensorB 5
6 2 SensorB 2
7 1 SensorB 3
8 1 SensorB 6
9 2 SensorB 7
10 1 SensorC 7
11 2 SensorC 4
12 1 SensorC 8
13 1 SensorC 1
14 2 SensorC 10