我正在尝试查找数据框内给定单词的概率,但是我的当前设置出现了AttributeError: 'Series' object has no attribute 'columns'错误。希望您能帮助我找到错误所在。

我从一个看起来像下面的数据帧开始,并使用下面的函数将其转换为每个单词的总计数。

query          count
foo bar        10
super          8
foo            4
super foo bar  2

功能如下:
def _words(df):
    return df['query'].str.get_dummies(sep=' ').T.dot(df['count'])

产生以下df(注意'foo'为16,因为它在整个df中出现了16次):
bar      12
foo      16
super    10

尝试在df中查找给定关键字的概率时出现问题,该关键字当前未附加列名。下面是我目前正在使用的内容,但是它抛出“AttributeError:'Series'对象没有属性'columns'”错误。
def _probability(df, query):
  return df[query] / df.groupby['count'].sum()

我的希望是,调用_probability(df,'foo')将返回0.421052632(16/(12 + 16 + 10))。提前致谢!

最佳答案

您可以在其末端扔一个管道:

df['query'].str.get_dummies(sep=' ').T.dot(df['count']).pipe(lambda x: x / x.sum())

bar      0.315789
foo      0.421053
super    0.263158
dtype: float64

从头开始:
这比较复杂,但速度更快
from numpy.core.defchararray import count

q = df['query'].values
c = df['count'].values.repeat(count(q.astype(str), ' ') + 1)
f, u = pd.factorize(' '.join(q.tolist()).split())
b = np.bincount(f, c)
pd.Series(b / b.sum(), u)

foo      0.421053
bar      0.315789
super    0.263158
dtype: float64

关于python - Pandas 值的概率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46655202/

10-11 20:30