Найти повторяющиеся слова в столбце и отсортировать их по количеству совпадений с помощью панд - PullRequest
0 голосов
/ 31 мая 2018
        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 раза, тогда строки с Америкой должны быть сдвинуты в верх, а строки с Италией.После Америки, а затем строки с Францией должны быть в конце, потому что в столбце А это самый низкий вхождения.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Использование 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
0 голосов
/ 31 мая 2018

Используйте transform с argsort 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...