【问题标题】:Find repeated words in a column and sort it according to number of occurence using pandas查找列中重复的单词并使用 pandas 根据出现次数对其进行排序
【发布时间】:2018-05-31 07:06:22
【问题描述】:
        A                             B
 1) Italy                   Transport for London.....
 2) Italy                   Roseanne Barr Actor leavin..... 
 3) America                 Americas Transport for London........ 
 4) America                 Transport for London.....
 5) America                 Roseanne Barr Actor leavin..... 
 6) France                  Americas Transport for London........ 

这是我的 Excel 表的一个示例,我希望它根据 A 列中出现的次数进行排序。就像美国在列中出现 3 次,然后美国的行应该转移到顶部,意大利的行跟随美国和那么法国的行应该在最后,因为它在 A 列中的出现率最低。

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    使用transformargsort in descending order 作为职位并通过iloc 选择:

    df = df.iloc[(-df.groupby('A')['A'].transform('size')).argsort()]
    print (df)
              A                              B
    3)  America  Americas Transport for London
    4)  America           Transport for London
    5)  America     Roseanne Barr Actor leavin
    1)    Italy           Transport for London
    2)    Italy     Roseanne Barr Actor leavin
    6)   France  Americas Transport for London
    

    或创建新列并排序:

    df['new'] = df.groupby('A')['A'].transform('size')
    
    df = df.sort_values('new', ascending=False)
    print (df)
              A                              B  new
    3)  America  Americas Transport for London    3
    4)  America           Transport for London    3
    5)  America     Roseanne Barr Actor leavin    3
    1)    Italy           Transport for London    2
    2)    Italy     Roseanne Barr Actor leavin    2
    6)   France  Americas Transport for London    1
    

    【讨论】:

      【解决方案2】:

      使用collections.Counter 创建计数字典:

      from collections import Counter
      
      df = pd.DataFrame([['Italy', 'Transport for London'],
                         ['Italy', 'Roseanne Barr Actor leavin'],
                         ['America', 'Americas Transport for London'],
                         ['America', 'Transport for London'],
                         ['America', 'Roseanne Barr Actor leavin'],
                         ['France', 'Americas Transport for London']],
                        columns=['A', 'B'])
      
      # calculate counts
      c = Counter(df['A'])
      
      # apply reordering
      df = df.iloc[df['A'].map(c).argsort()[::-1]]
      
      # save to excel
      df.to_excel('file.xlsx', index=False)
      

      结果:

      print(df)
      
               A                              B
      4  America     Roseanne Barr Actor leavin
      3  America           Transport for London
      2  America  Americas Transport for London
      1    Italy     Roseanne Barr Actor leavin
      0    Italy           Transport for London
      5   France  Americas Transport for London
      

      【讨论】:

      • 当数据很大时,这段代码会给我一个混乱的输出。例如,美国位居榜首,因为它被使用了三倍。但是当我们转到文档的中间时,会出现一些混合的结果,例如法国和意大利一次又一次地重复。确切地说,前几个条目排序良好,后面的条目搞砸了
      • @TayyabNasir,要准确,您必须显示minimal reproducible example。但是,既然您有另一个解决方案,一切都很好。对于它的价值collections.Counter 是标准库的一部分,它极不可能有错误。
      • 刚刚注意到其他解决方案也存在同样的问题。我认为问题出在我保存数据的部分。请问您可以编辑您的代码并将其保存到excel部分吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 2015-06-25
      相关资源
      最近更新 更多