[英]How to draw multiple levels groupby histograms in Python?
我有一个像这样的 dataframe,
col1 col2 col3
A east 5
A west 7
A east 1
A east 6
B east 2
B west 9
B east 8
...
Z west 4
我知道如何分组并通过使用制作直方图
df[df.col1.isin(ix)].groupby('col1').hist()
如何使用上面的 dataframe 获得 2 个级别的 groupby 并绘制直方图? 对于每个col1
组直方图,我希望它们位于单独的 plot 中。 但是对于每个col2
组。 我希望他们像这样合而为一。
例如,最终结果将是来自AZ
的 26 个直方图。 每个内部有 2 个地块( east&west
)。
您可以通过 pivot 表和分组 plot:
df = pd.DataFrame({'col1': np.random.choice(('A','B'), size=100),
'col2': np.random.choice(('east', 'west'), size=100),
'col3': np.random.randint(0,10, 100)})
df['idx'] = df.groupby('col1').col2.cumcount()
(df.pivot_table(index=['idx','col1'],
columns=['col2'],
values='col3')
.groupby('col1').plot.hist(subplots=False, alpha=0.5)
)
Output:
seaborn
:col1
上的pandas.DataFrame.sort_values
也将从A
到Z
排序 plot 序列import string
import numpy as np
import pandas as pd
import random
alpha_list = [random.choice(list(string.ascii_uppercase)) for _ in range(10_000)]
coor_list = [random.choice(['east', 'west']) for _ in range(10_000)]
rand_val = [np.random.randint(10) for _ in range(10_000)]
df = pd.DataFrame({'col1': alpha_list, 'col2': coor_list, 'col3': rand_val})
df.sort_values(by='col1', inplace=True)
col1 col2 col3
A west 1
A east 3
A west 9
A west 5
A west 7
A east 1
A east 5
A west 2
A east 2
A west 2
col_wrap
seaborn.FacetGrid
seaborn.distplot
g = sns.FacetGrid(df, col='col1', hue='col2', col_wrap=7)
g.map(sns.distplot, 'col3', hist_kws=dict(edgecolor='black'), bins=range(0, 11, 1), kde=False)
plt.xlabel('Value Range')
plt.ylabel('Frequency')
plt.legend()
plt.xticks(range(1, 11, 1))
plt.show()
plt.show()
之前的行中:for ax in g.axes.flatten():
ax.tick_params(labelbottom=True)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.