我的数据框架主要是分类列:
df = pd.DataFrame({
'col_to_group': ['A', 'A', 'B', 'B', 'A'],
'col_1': ['a', 'b', 'c', 'a', 'a'],
'col_2': ['x', 'y', 'y', 'y','x'],
'col_3': [.1, .2, .1, .9, .7]
})
基本上,我想绘制col_1
、col_2
的条形图,按col_to_group
(A,B)的子组和整个数据帧(ALL)。你知道吗
以下是我目前的解决方案:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({
'col_to_group': ['A', 'A', 'B', 'B', 'A'],
'col_1': ['a', 'b', 'c', 'a', 'a'],
'col_2': ['x', 'y', 'y', 'y','x'],
'col_3': [.1, .2, .1, .9, .7]
})
for i in ['col_1', 'col_2']:
L = df.groupby('col_to_group')[i].value_counts(normalize=True).unstack().T
R = df[i].value_counts(normalize=True).rename('ALL')
z = pd.concat([L, R], axis=1, sort=True).T
#z.T.to_csv(i+'_bar.csv')
#plotting:
zz = z.plot.bar(stacked=True).legend(bbox_to_anchor=(1.0, 1.0)).get_figure()
plt.title(i, fontsize = 12)
zz.savefig(i+'_bar.png', dpi=300, bbox_inches='tight')
plt.show()
z
创造是复杂的,而且我不是matplotlib
的粉丝-它能在一行中完成吗?你知道吗
我在寻找潘多斯特的解决方案。你知道吗
在深入研究文档之后,我发现
crosstab
和margins
和normalize=index
更巧妙地解决了我的问题。你知道吗我会这样做:
相关问题 更多 >
编程相关推荐