从python熊猫中的数据框中计算不同的单词

时间:2019-07-15 18:10:22

标签: python pandas numpy dataframe

我试图拆分单词,然后使用python pandas对其进行计数。

原始数据就像

col_A 

happy, not happy
sad,happy
sad, happy
angry, happy
angry, sad

我尝试使用此功能对col_A中的单词进行计数。

word_list= df.col_A.apply(lambda x: pd.value_counts(x.split(","))).sum(axis=0)

word_list.sort_values(ascending = False)

它将给我类似的结果

angry       2
happy       2
sad         2
 happy      2
 not happy  1
 sad        1

如何避免这些空格返回真实的值计数?

我想返回一个列表,

happy      4
sad        3
angry      2
not happy  1

7 个答案:

答案 0 :(得分:4)

这是一个与@ anky_91的解决方案非常相似的解决方案:

DockerDebuggeeArguments

答案 1 :(得分:3)

一支班轮,不能保证效率,但是有效:)

pd.Series([x.strip() for x in df.col_A.str.split(',').sum()]).value_counts()

输出:

happy        4
sad          3
angry        2
not happy    1

效率测试:

%timeit pd.Series([x.strip() for x in df.col_A.str.split(',').sum()]).value_counts()
1.19 ms ± 35.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit pd.Series(sum([list(map(str.strip, i.split(','))) for i in df['col_A']], [])).value_counts()
1.13 ms ± 20.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

答案 2 :(得分:3)

我们将meltstackstr.splitvalue_counts一起使用:

df['col_A'].str.split(r',\s?', expand=True).melt()['value'].value_counts()

df['col_A'].str.split(r',\s?', expand=True).stack().value_counts()

输出:

happy        4
sad          3
angry        2
not happy    1
dtype: int64

答案 3 :(得分:2)

先尝试series.str.get_dummies(),然后再str.strip()列,然后执行groupby(axis=1).sum().sum()

m=df.col_A.str.get_dummies(',')
m.groupby(m.columns.str.strip(),axis=1).sum().sum()

angry        2
happy        4
not happy    1
sad          3
dtype: int64

答案 4 :(得分:0)

尝试

word_list= df.col_A.apply(lambda x: pd.value_counts([i.strip() for i in [x.split(",")]])).sum(axis=0)

看看是否有效

答案 5 :(得分:0)

空格妨碍了操作

In [147]: word_list = df.col_A.apply(lambda x: pd.value_counts(x.replace(" ","").split(","))).sum(axis=0).sort_values(ascending 
     ...: = False)                                                                                                              

In [148]: word_list                                                                                                             
Out[148]: 
happy       4.0
sad         3.0
angry       2.0
nothappy    1.0
dtype: float64

答案 6 :(得分:0)

分步解决方案

df = pd.DataFrame(data={"col_A":["happy, not happy","sad,happy","sad, happy","angry, happy","angry, sad"]})

word_list= df.col_A.apply(lambda x: pd.value_counts(x.split(","))).sum(axis=0)

df = pd.DataFrame(word_list,columns=['count']).reset_index().rename(columns={"index":"words"})

df['words'] = df['words'].str.strip()

df = df.groupby(['words']).sum().sort_values(by=['count'],ascending=[False]).reset_index()
    words      count
0   happy       4.0
1   sad         3.0
2   angry       2.0
3   not happy   1.0