归一化和绘制按第 4 列分组的 3 列数据
Normalizing and Plotting Data of 3 Columns Grouped by 4th Column
我的dataframe
如下,link快速.csv。值 a
和 b
也可以视为 true
或 false
.
+------+------+------+--------+
| COl1 | COl2 | COl3 | Group |
+------+------+------+--------+
| a | b | a | Yellow |
| b | b | a | Blue |
| a | a | b | Red |
| a | b | a | Red |
| a | a | b | Yellow |
| b | b | a | Blue |
| b | b | a | Yellow |
| a | a | b | Blue |
| a | b | a | Red |
| b | a | b | Blue |
| b | b | a | Yellow |
| a | a | a | Blue |
| b | a | b | Red |
+------+------+------+--------+
我想要一个按第四列分组的前三列的条形图。前三列中的数据是分类数据,我希望得到它们的标准化计数。所有三列中的类别数(即值 a
和 b
)相同。在单列的情况下,我通常会规范化为:
df_grouped = df_main.groupby('Group')['COL1'].value_counts(normalize=True)*100
但是,当我尝试使用下面的代码对列进行分组时,我无法在将其绘制为条形图之前将计数标准化:
df_grouped = df_main.groupby('Group')['COL1', 'COL2', 'COL3'].count().reset_index()
df_grouped.plot.bar()
如果可能的话,像下面这样在图中分组会很好:
感谢您的帮助。
由于您的数据是二进制的,您可以像这样使用 groupby
:
(df.iloc[:,:-1].eq('a') # `True` class
.groupby(df['Group']).mean()
.plot.bar()
)
输出:
如果您需要更深入地研究每个 COL,还可以获得虚拟对象、groupby 和 plot
df1=pd.get_dummies(df, columns=['COl1','COl2','COl3'])
(df1.groupby('Group').mean()*100).plot(kind='bar')
我的dataframe
如下,link快速.csv。值 a
和 b
也可以视为 true
或 false
.
+------+------+------+--------+
| COl1 | COl2 | COl3 | Group |
+------+------+------+--------+
| a | b | a | Yellow |
| b | b | a | Blue |
| a | a | b | Red |
| a | b | a | Red |
| a | a | b | Yellow |
| b | b | a | Blue |
| b | b | a | Yellow |
| a | a | b | Blue |
| a | b | a | Red |
| b | a | b | Blue |
| b | b | a | Yellow |
| a | a | a | Blue |
| b | a | b | Red |
+------+------+------+--------+
我想要一个按第四列分组的前三列的条形图。前三列中的数据是分类数据,我希望得到它们的标准化计数。所有三列中的类别数(即值 a
和 b
)相同。在单列的情况下,我通常会规范化为:
df_grouped = df_main.groupby('Group')['COL1'].value_counts(normalize=True)*100
但是,当我尝试使用下面的代码对列进行分组时,我无法在将其绘制为条形图之前将计数标准化:
df_grouped = df_main.groupby('Group')['COL1', 'COL2', 'COL3'].count().reset_index()
df_grouped.plot.bar()
如果可能的话,像下面这样在图中分组会很好:
由于您的数据是二进制的,您可以像这样使用 groupby
:
(df.iloc[:,:-1].eq('a') # `True` class
.groupby(df['Group']).mean()
.plot.bar()
)
输出:
如果您需要更深入地研究每个 COL,还可以获得虚拟对象、groupby 和 plot
df1=pd.get_dummies(df, columns=['COl1','COl2','COl3'])
(df1.groupby('Group').mean()*100).plot(kind='bar')