如何正确统计Pandas DataFrame中多值列内单个完整水果的出现频率?
解决水果出现频率统计的问题
嘿,我懂你遇到的麻烦了!问题出在你使用str.split()的时候没指定正确的分隔符——默认情况下这个方法会按任意空白字符拆分文本,这就把像"black currant"、"black berries"这种带空格的完整水果名给拆成了单个单词,自然统计出来的结果就不符合预期啦。
问题重现
先看你的原始DataFrame:
import pandas as pd details = { 'container_id' : [1, 2, 3, 4, 5, 6 ], 'container' : ['black box', 'orange box', 'blue box', 'black box','blue box', 'white box'], 'fruits' : ['apples, black currant', 'oranges','peaches, oranges', 'apples','apples, peaches, oranges', 'black berries, peaches, oranges, apples'], } df = pd.DataFrame(details)
你之前的代码df['fruits'].str.split(expand=True).stack().value_counts()会把"black currant"拆成black和currant,"black berries"拆成black和berries,所以black被错误统计了2次。
正确解决方案
只需要指定拆分的分隔符为, (逗号加空格),因为你的水果列表是用这个格式分隔的:
df['fruits'].str.split(', ', expand=True).stack().value_counts()
输出结果
执行后会得到符合预期的统计:
apples 4 oranges 3 peaches 3 black currant 1 black berries 1 dtype: int64
额外优化(可选)
如果你的数据里存在格式不统一的情况(比如有的水果之间是逗号后没空格,像apples,black currant),可以用正则表达式来兼容这种情况,拆分时匹配逗号后任意数量的空格:
df['fruits'].str.split(',\s*', expand=True).stack().value_counts()
这样不管逗号后有没有空格,都能正确拆分出完整的水果名称。
内容的提问来源于stack exchange,提问作者vartholomeos007
相关产品推荐
相关产品推荐

