我有一个来自多项选择题的dataframe,它的格式如下:

      Sex Qu1  Qu2  Qu3
Name
Bob    M   1    2    1
John   M   3    3    5
Alex   M   4    1    2
Jen    F   3    2    4
Mary   F   4    3    4

数据是3个多项选择题的1到5级评分。我想重新排列数据以使索引为range(1,6),其中1 ='坏',2 ='差',3 ='好',4 ='好',5 ='优秀',这些列是相同,数据是值出现次数的计数(不包括“性别”列)。这基本上是固定大小的容器和带字符串标记的x轴的直方图。为此,我喜欢df.plot()的输出要比df.hist()更好,但是我不知道如何重新排列表格以给我数据的直方图。另外,如何将x标签更改为字符串?

最佳答案

Series.value_counts为您提供所需的直方图:

In [9]: df['Qu1'].value_counts()
Out[9]:
4    2
3    2
1    1

因此,将此功能应用于这三列中的每列:
In [13]: table = df[['Qu1', 'Qu2', 'Qu3']].apply(lambda x: x.value_counts())

In [14]: table
Out[14]:
   Qu1  Qu2  Qu3
1    1    1    1
2  NaN    2    1
3    2    2  NaN
4    2  NaN    2
5  NaN  NaN    1

In [15]: table = table.fillna(0)

In [16]: table
Out[16]:
   Qu1  Qu2  Qu3
1    1    1    1
2    0    2    1
3    2    2    0
4    2    0    2
5    0    0    1

使用table.reindextable.ix[some_array]您可以重新排列数据。

要转换为字符串,请使用table.rename:
In [17]: table.rename(index=str)
Out[17]:
   Qu1  Qu2  Qu3
1    1    1    1
2    0    2    1
3    2    2    0
4    2    0    2
5    0    0    1

In [18]: table.rename(index=str).index[0]
Out[18]: '1'

关于python - 如何转换 Pandas 数据框,以便索引是唯一的一组值,数据是每个值的计数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10908295/

10-13 06:36
查看更多