交叉表合并后在python中绘图

时间:2018-06-19 22:39:20

标签: python pandas dataframe seaborn crosstab

我想绘制我的DataFrame。我先有这个DF:

id|project|categories|rating 
1 | a     | A        | 1
1 | a     | B        | 1
1 | a     | C        | 2
1 | b     | A        | 1
1 | b     | B        | 1
2 | c     | A        | 1
2 | c     | B        | 2

使用此代码:

import pandas as pd

df = pd.DataFrame(...)
(df.groupby('id').project.nunique().reset_index()
   .merge(pd.crosstab(df.id, df.categories).reset_index()))

现在得到了DataFrame

id | project | A | B | C |
 1 | 2       | 2 | 2 | 1 |
 2 | 1       | 1 | 1 | 0 |

现在,我想绘制DF。我想说明一下,项目的数量是否取决于受影响的类别或受影响的类别。我知道如何可视化数据框,但是在交叉表和合并之后,它无法像往常一样工作

1 个答案:

答案 0 :(得分:0)

我使用以下代码复制了您的数据:

import pandas as pd

df = pd.DataFrame({'id': [1, 1, 1, 1, 1, 2, 2,],\
                  'project': ['a', 'a', 'a', 'b', 'b', 'c', 'c'],\
                  'categories': ['A', 'B', 'C', 'A', 'B', 'A', 'B'],\
                  'rating': [1, 1, 2, 1, 1, 1, 2]})

现在的数据看起来像这样

  categories  id project  rating
0          A   1       a       1
1          B   1       a       1
2          C   1       a       2
3          A   1       b       1
4          B   1       b       1
5          A   2       c       1
6          B   2       c       2

如果您想将“类别计数”作为“项目计数”的函数进行绘制,则如下所示。

import matplotlib.pyplot as plt

# this line is your code
df2 = df.groupby('id').project.nunique().reset_index().merge(pd.crosstab(df.id, df.categories).reset_index())

plt.scatter(df2.project, df2.A, label='A', alpha=0.5)
plt.scatter(df2.project, df2.B, label='B', alpha=0.5)
plt.scatter(df2.project, df2.C, label='C', alpha=0.5)

plt.xlabel('project count')
plt.ylabel('category count')
plt.legend()
plt.show()

然后您会得到这个

enter image description here