gpt4 book ai didi

python - 如何以 pandastic 方式绘制堆叠条形图?

转载 作者:太空宇宙 更新时间:2023-11-04 11:10:48 26 4
gpt4 key购买 nike

我的数据框主要包含分类列:

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_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 的粉丝 - 可以一行完成吗?

我正在为此寻找 pandastic 解决方案。

最佳答案

我会做这样的事情:

df1=df.groupby('col_to_group')['col_1','col_2'].apply(lambda x: x.apply(lambda x: x.value_counts(normalize=True),axis=0)).unstack(level=1).dropna(how='all',axis=1).fillna(0)
print(df1)

                 col_1                    col_2          
a b c x y
col_to_group
A 0.666667 0.333333 0.0 0.666667 0.333333
B 0.500000 0.000000 0.5 0.000000 1.000000

df2=df[['col_1','col_2']].apply(lambda x: x.value_counts(normalize=True)).unstack().dropna().rename('ALL').to_frame().T
print(df2)


col_1 col_2
a b c x y
ALL 0.6 0.2 0.2 0.4 0.6

plot_df=pd.concat([df1,df2])
print(plot_df)


col_1 col_2
a b c x y
A 0.666667 0.333333 0.0 0.666667 0.333333
B 0.500000 0.000000 0.5 0.000000 1.000000
ALL 0.600000 0.200000 0.2 0.400000 0.600000

plot_df['col_1'].plot(kind='bar',stacked=True)
plot_df['col_2'].plot(kind='bar',stacked=True)

enter image description here

enter image description here

关于python - 如何以 pandastic 方式绘制堆叠条形图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58268441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com