我试图拆分单词,然后使用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
答案 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)
我们将melt
和stack
与str.split
或value_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