Python 如何以百分比的形式获取列的出现频率

Python 如何以百分比的形式获取列的出现频率,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据集df,看起来与此类似: houses price ranch 300,000 ranch 350,000 ranch 400,000 condo 250,000 condo 275,000 townhome 300,000 percent is part/whole df1 = df.groupby['houses'].sum() #df1 gives us the sum percent = df1.['houses']

我有一个数据集df,看起来与此类似:

houses    price
ranch     300,000
ranch     350,000
ranch     400,000
condo     250,000
condo     275,000
townhome  300,000
percent is part/whole


df1 = df.groupby['houses'].sum()    #df1 gives us the sum
percent = df1.['houses']/df1
我想在“房屋”栏中按不同类别分组,并显示每个类别的百分比

所需输出

houses      percent
ranch       50%
condo       33%
townhome    16.60%
这就是我正在做的:

houses    price
ranch     300,000
ranch     350,000
ranch     400,000
condo     250,000
condo     275,000
townhome  300,000
percent is part/whole


df1 = df.groupby['houses'].sum()    #df1 gives us the sum
percent = df1.['houses']/df1
然而,我并没有同时保留柱子和房子
欢迎提出任何建议

您可以使用
value\u counts
计算唯一值,并使用
normalize
参数:

df['houses'].value_counts(normalize=True) * 100

ranch       50.000000
condo       33.333333
townhome    16.666667
Name: houses, dtype: float64
编辑:要转换为数据帧,请执行以下操作:

(df['houses'].value_counts(normalize=True) * 100).to_frame()

您可以使用
value\u counts
计算唯一值,并使用
normalize
参数:

df['houses'].value_counts(normalize=True) * 100

ranch       50.000000
condo       33.333333
townhome    16.666667
Name: houses, dtype: float64
编辑:要转换为数据帧,请执行以下操作:

(df['houses'].value_counts(normalize=True) * 100).to_frame()
Groupby版本:

>>> df.groupby('houses').count() / len(df) * 100

              price
houses             
condo     33.333333
ranch     50.000000
townhome  16.666667
Groupby版本:

>>> df.groupby('houses').count() / len(df) * 100

              price
houses             
condo     33.333333
ranch     50.000000
townhome  16.666667

您需要更改读取数据的方式<代码>“价格”不是一个数字。如果您正在使用
.read_csv()
从csv读取数据,请使用
数千=','
参数。好的,谢谢@trentonmckinney您需要更改读取数据的方式<代码>“价格”不是一个数字。如果您正在使用
.read_csv()
,从csv读取数据,请使用
数千=','
参数。好的,谢谢@TrentonMcKinney