例如,我有一个像这样的数据框:
data = {'id': [1,1,1,2,2],
'value': ['red','red and blue','yellow','oak','oak wood']
}
df = pd.DataFrame (data, columns = ['id','value'])
我想要:
id value count
1 red 2
1 blue 1
1 yellow 1
2 oak 2
2 wood 1
非常感谢!
最佳答案
pandas 0.25+ 的解决方案 DataFrame.explode
通过 Series.str.split
创建的列表和 GroupBy.size
:
df1 = (df.assign(value = df['value'].str.split())
.explode('value')
.groupby(['id','value'], sort=False)
.size()
.reset_index(name='count'))
print (df1)
id value count
0 1 red 2
1 1 and 1
2 1 blue 1
3 1 yellow 1
4 2 oak 2
5 2 wood 1
对于较低的 pandas 版本,请使用 DataFrame.set_index
与 Series.str.split
和 DataFrame
的 expand=True
,通过 DataFrame.stack
reshape ,从 MultiIndex Series
创建列,并使用与上面相同的解决方案:
df1 = (df.set_index('id')['value']
.str.split(expand=True)
.stack()
.reset_index(name='value')
.groupby(['id','value'], sort=False)
.size()
.reset_index(name='count')
)
print (df1)
id value count
0 1 red 2
1 1 and 1
2 1 blue 1
3 1 yellow 1
4 2 oak 2
5 2 wood 1
关于python - 计算列字符串值中包含的每个单词的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60339803/