У меня есть 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. Таким образом, возможно, они не подходят для выполнения этой задачи. Любое предложение?
заранее спасибо
У меня может быть то, что нужно назад. Если вам нужно количество элементов в 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