Python 如何以百分比的形式获取列的出现频率
我有一个数据集df,看起来与此类似: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']
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