python - 减少 pandas DataFrame 中的列数

标签 python pandas seaborn

我正在尝试在 seaborn 中创建 fiddle 情节.输入是一个 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'

我希望每个 Sensor 都是沿 x 轴的独立 fiddle 。

我认为这意味着我需要将其转换成某种形式:

>>>df.columns
Index('Value', 'Sensor', 'group_id')

新 DataFrame 中的 Sensor 列包含文本“SensorA”、“SensorB”等,而新 DataFrame 中的 Value 列包含的值在每个 Sensor[A-Z] 列中都是原始的,并且组信息被保留。

然后我可以使用以下命令创建 fiddle 图:

ax = sns.violinplot(x="Sensor", y="Value", hue="group_id", data=df)

我想我有点需要做一个反向枢轴。有没有一种简单的方法可以做到这一点?

最佳答案

使用panda的melt函数

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

关于python - 减少 pandas DataFrame 中的列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33657990/

相关文章:

python - 将 python 函数作为 bash 命令运行

python - 用于停止 Windows 脚本的全局热键

python - 计算非零元素并绘图

python - 使用更新的索引将 python pandas 数据框的最后一行复制并添加到自身

python - 使用 cElementTree 从 XML 查找所有节点

python - Glob.glob 多个 dataframe 来计算 pandas 中的添加

python - 如何根据当前行的条件获取 pandas GroupBy Dataframe 的前几行?

python - cmap 在seaborn 中如何工作以及如何更改分箱?

python - 标记从分组的 Pandas DataFrame 创建的条形图,其中有一个 NaN 类别

pandas - 围绕 Seaborn FacetGrid 轴绘制框