我有一个数据框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
....
我想计算数据框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)
我尝试了上述两个选项,但是结果返回一个新的数据帧,其中数据帧A的行数和数据帧B的行数减少。 因此,也许它们不是执行此任务的正确方法。 有什么建议吗?
预先感谢
答案 0 :(得分: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