python计算某些列中确切的分布数是Dataframe

时间:2017-07-16 11:16:47

标签: python pandas dataframe

编写一个python程序来获取数据帧(pandas) - " pre_data_matrix" ,在这个数据框中有一个名为" PostTextPolarity"的列,它的值介于-1和1之间,想要计算" PostTextPolarity"例如,当它> 0,< 0和= 0时,总共有超过30000个项目,可能是" PostTextPolarity"当它是> 0时是10000,也许可能是" PostTextPolarity"当它是< 0是20000,我想获得确切的数字,程序是:

    select_sql = "select userID,userName,userURL,postTime,postText,postTextLength,likesCount,sharesCount,commentsCount,postTextPolarity,postTextSubjectivity from fb_pre_davi_group_members_posts"
    cur.execute(select_sql)

    pre_data = cur.fetchall()
    pre_data_list = list(pre_data )
    ...
    pre_data_matrix = pd.DataFrame(pre_data_list,columns = ['userId','UserName','UserURL','PostTime','PostText','PostTextLength','LikesCount','SharesCount','CommentsCount','PostTextPolarity','PostTextSubjectivity'])
    print(pre_data_matrix )

它显示:

         LikesCount  SharesCount  CommentsCount      PostTextPolarity  \
    0       0            0              0                   0.0   
    1       0            0              0    0.3571428571428571   
    2       3            0              0                   1.0   
    3      11            0              0                   0.0   
    4      11            0              0   0.46909090909090906   
    5       0            0              0                   0.9   
    6      11            0              1                 0.625   
    7      11            0              1                   0.0   
    8      11            0              0               0.56875   
    9      11            0              0                   0.0   
   10      0            0              1   0.08333333333333333   
   11      20            0              2                   0.0   
   12      4            0              1                   0.0   
   13      7            0              1                   0.0   
   14      11            0              1                  0.25   
   ...

你能不能告诉我如何获得PostTextPolarity> 0,= 0和< 0的确切数量,也许需要使用其他库如numpy

1 个答案:

答案 0 :(得分:0)

通过pandas库使用np.where:

g = pd.np.where(df.PostTextPolarity == 0,'Equals 0',pd.np.where(df.PostTextPolarity < 0,'< 0','> 0'))

df.groupby(g)['PostTextPolarity'].count().rename_axis('Category').reset_index()

输出:

   Category  PostTextPolarity
0       > 0                 8
1  Equals 0                 7