如何在pandas中绘制图形计数表

2024-01-03

我有一个包含两列的数据框 dfcustomer1 and customer2这是字符串值。我想用方形图形表示这两列中每对的计数。

我可以

df[['customer1', 'customer2']].value_counts()

这会给我计数。但我怎样才能做出看起来有点像的东西:

从结果来看?

我无法提供真实的数据集,但这是一个 csv 中包含三个标签的玩具示例。

customer1,customer2
a,b
a,c
a,c
b,a
b,c
b,c
c,c
a,a
b,c
b,c

UPDATE:

是否可以对行/列进行排序,以便最高计数的行是 在顶部 ?在这种情况下,顺序为 b,a,c

IIUC 你可以这样做(其中 ):

In [80]: x = df.pivot_table(index='customer1',columns='customer2',aggfunc='size',fill_value=0)

In [81]: idx = x.max(axis=1).sort_values(ascending=0).index

In [82]: idx
Out[82]: Index(['b', 'a', 'c'], dtype='object', name='customer1')

In [87]: sns.heatmap(x[idx].reindex(idx), annot=True)
Out[87]: <matplotlib.axes._subplots.AxesSubplot at 0x9ee3f98>

旧答案:

您可以使用热图() https://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.heatmap.html方法来自seaborn module:

In [42]: import seaborn as sns

In [43]: df
Out[43]:
  customer1 customer2
0         a         b
1         a         c
2         a         c
3         b         a
4         b         c
5         b         c
6         c         c
7         a         a
8         b         c
9         b         c

In [44]: x = df.pivot_table(index='customer1',columns='customer2',aggfunc='size',fill_value=0)

In [45]: x
Out[45]:
customer2  a  b  c
customer1
a          1  1  2
b          1  0  4
c          0  0  1

In [46]: sns.heatmap(x)
Out[46]: <matplotlib.axes._subplots.AxesSubplot at 0xb150b70>

或带有注释:

In [48]: sns.heatmap(x, annot=True)
Out[48]: <matplotlib.axes._subplots.AxesSubplot at 0xc596d68>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在pandas中绘制图形计数表 的相关文章

随机推荐