Подсчитайте, сколько раз каждая строка кадра данных A появляется в каждой строке множества элементов в другом кадре данных

1

У меня есть DataFrame A с одним столбцом, строки 2009 года, с множеством элементов в каждой строке, например:

                          Text
                  0       first, german, television,abide, called, ladies, dai...
                  1       party, day, hanover, cdu, first, soft, bundest...
                  2       evening,ability chancellor, merkel, berlin, israeli, ...
                  3       egypt, followers, opponent, president, must, v...
                  4       eu, commission, wants, high, youth, unemployme...
                  5       european, aviation, armament, company, eads, s...
                   ....

И еще один блок данных B, 1900 строк с одним элементом в каждой строке

                               Word
              0                 abide
              1               ability
              2                 able
              3               abound
              4              absolve
              5            absorbent
              6           absorption
              7            abundance
             ....

Я хочу подсчитать, сколько раз элемент во всех строках DataFrame B появляется в каждой строке блока данных A

      Word=B.Word
      List=Word.tolist()

      #Option 1
      A.Text.str.extractall(
'({})'.format('|'.join(str(v) for v in List))
  ).groupby(level=0) 
 [0].value_counts().unstack(fill_value=0)

  Option2
df=A.Text.str.extractall('({})'.format('|'.
join(map(str, List))))\                       
.iloc[:,0].str.get_dummies().sum(level=0)

Я попробовал 2 над параметрами, но результат возвращает новый кадр данных с количеством строк кадра данных A и уменьшением кадра данных B. Таким образом, возможно, они не подходят для выполнения этой задачи. Любое предложение?

заранее спасибо

Теги:
pandas
count

1 ответ

1

У меня может быть то, что нужно назад. Если вам нужно количество элементов в dfB которые появляются в каждой строке dfA:

dfA.Text.str.split(',\s?', expand=True).stack().isin(dfB.Word.tolist()).groupby(level=0).sum()

Если вам нужно количество раз, когда элемент в dfB появляется где-нибудь в dfA:

dfA.Text.str.split(',\s?', expand=True).stack().value_counts().reindex(dfB.Word)

Пример данных

import pandas as pd
dfA = pd.DataFrame({'Text':['first, german, television,abide, called, ladies',
                            'party, day, hanover, cdu, first, soft', 
                            'foo, bar, baz, zoo']})
dfB = pd.DataFrame({'Word': ['first', 'german', 'party', 'soft']})

Код

dfA.Text.str.split(',\s?', expand=True).stack().isin(dfB.Word.tolist()).groupby(level=0).sum()
#0    2.0
#1    3.0
#2    0.0
#dtype: float64

dfA.Text.str.split(',\s?', expand=True).stack().value_counts().reindex(dfB.Word)
#Word
#first     2
#german    1
#party     1
#soft      1
#dtype: int64
  • 0
    Еще один второстепенный вопрос: если я хочу увидеть детали. Я имею в виду, прежде чем подвести итог, я хочу увидеть, сколько раз каждое слово в df B появляется в каждой строке df A. Какие коды я могу изменить из ваших кодов? .dfA.Text.str.split (', \ s?', expand = True) .stack (). isin (dfB.Word.tolist ()). groupby (уровень = 0). не работает И ваши коды выше действительно спасут мой день. Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню