微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-减少pandas DataFrame中的列数

我正在尝试在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐