我想根据每个相关国家/地区的出现次数来计算“产品”列的百分比。非常感谢您的帮助。
这是我到目前为止所做的, 我使用以下代码计算了新的数据框:
gb = data1.groupby(['Country', 'Products']).size()
df = gb.to_frame(name = 'ProductsCount').reset_index()
df
哪个给我的东西看起来像这样:
Countries Products ProductsCount
0 Country 1 Product 1 5
1 Country 1 Product 2 31
2 Country 2 Product 1 2
3 Country 2 Product 2 1
注意:我有成千上万的输出。
我的目标是直接根据国家/地区获得每种产品的百分比,而无需计算['ProductsCount'],如下所示:
Countries Products Percentage
0 Country 1 Product 1 0.138
1 Country 1 Product 2 0.861
2 Country 2 Product 1 0.667
3 Country 2 Product 2 0.333
否则,如果我无法获得仅显示%的输出,那么我想要这样的事情:
Countries Products ProductsCount Products%
0 Country 1 Product 1 5 0.138
1 Country 1 Product 2 31 0.861
2 Country 2 Product 1 2 0.667
3 Country 2 Product 2 1 0.333
我设法使用以下代码根据整个数据集只计算了百分比:
df['Products%'] = df.ProductsCount/len(df.Country)
提前谢谢!
答案 0 :(得分:0)
将SeriesGroupBy.value_counts
与normalize=True
参数一起使用:
df = (data1.groupby('Countries')['Products']
.value_counts(normalize=True,sort=False)
.reset_index(name='Percentage'))
print (df)
Countries Products Percentage
0 Country 1 Product 1 0.138889
1 Country 1 Product 2 0.861111
2 Country 2 Product 1 0.666667
3 Country 2 Product 2 0.333333
编辑:
df = (data1.groupby('Countries')['Products']
.value_counts(sort=False)
.reset_index(name='ProductsCount')
.assign(Percentage = lambda x: x['ProductsCount'].div(len(x))))
print (df)