pandas数据帧中的子字频率计数

2024-05-14 03:00:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas.DataFrame,有两列,其中包括酒精种类(即伏特加80伏特加、加拿大威士忌、香料朗姆酒)和售出的酒瓶数量。我想先把它分为粒度较小的类别,即威士忌、伏特加、朗姆酒,然后再把每一类售出的所有瓶子加起来。在

我的代码不允许我隔离标签,如“伏特加”,而是返回类别的频率,如“伏特加80证明”。在

输入:

top_N = 10 # top 10 most used categories

word_dist = nltk.FreqDist(df['Category Name'])

print('All frequencies:')
print('=' * 60)
rslt = pd.DataFrame(word_dist.most_common(top_N),
                    columns=['Word', 'Frequency'])
print(rslt)
print('=' * 60)

df= df.groupby('Category Name')['Bottles Sold'].sum()

输出:

^{pr2}$

有什么想法吗?在


Tags: namemostdataframepandasdfdisttop类别
2条回答

你考虑过添加匹配词的类别吗?比如:

代码:

categories = {'VODKA', 'WHISKIES', 'RUM', 'TEQUILA', 'LIQUEUR'}
df['category'] = df['product'].apply(lambda x:
                                     [c for c in categories if c in x]

测试代码:

^{pr2}$

结果:

                            product  count  category
0                    VODKA 80 PROOF  35373     VODKA
1                 CANADIAN WHISKIES  27087  WHISKIES
2         STRAIGHT BOURBON WHISKIES  15342  WHISKIES
3                        SPICED RUM  14631       RUM
4                    VODKA FLAVORED  14001     VODKA
5                           TEQUILA  12109   TEQUILA
6                  BLENDED WHISKIES  11547  WHISKIES
7                   WHISKEY LIQUEUR  10902   LIQUEUR
8                    IMPORTED VODKA  10668     VODKA
9  PUERTO RICO & VIRGIN ISLANDS RUM  10062       RUM

category
LIQUEUR     10902
RUM         24693
TEQUILA     12109
VODKA       60042
WHISKIES    53976
Name: count, dtype: int32

谢谢你的意见,斯蒂芬!在

我做了一点小小的修改,因为你的回答返回了一个键错误。 以下是我的修改:

def search_brand(x):
    x = str(x)
    list_brand = ['VODKA','WHISKIES', 'RUM', 'TEQUILA', 'LIQUEUR', 'BRANDIES', 'COCKTAILS']
    for word in list_brand:
        if word in x:
            return word


df['Broad Category'] = df['Category Name'].apply(search_brand)

相关问题 更多 >