【问题标题】:Pandas get frequency of item occurrences in a column as percentage [duplicate]熊猫以百分比形式获取列中项目出现的频率[重复]
【发布时间】:2018-11-06 13:55:44
【问题描述】:
我想在 df 列中获取特定值的百分比。假设我有一个带有 (col1, col2, col3, gender) 性别列的 df,其值为 M、F 或其他。我想得到df中M、F、其他值的百分比。
我试过这个,它给了我 M、F、Other 实例的数量,但我希望这些是 df 中值总数的百分比。
df.groupby('gender').size()
有人可以帮忙吗?
【问题讨论】:
标签:
python
pandas
dataframe
percentage
【解决方案1】:
如果您不需要查看除gender 列之外的M 和F 值,那么您可以尝试使用value_counts() 和count(),如下所示:
df = pd.DataFrame({'gender':['M','M','F', 'F', 'F']})
# Percentage calculation
(df['gender'].value_counts()/df['gender'].count())*100
结果:
F 60.0
M 40.0
Name: gender, dtype: float64
或者,使用groupby:
(df.groupby('gender').size()/df['gender'].count())*100
【解决方案2】:
将value_counts 与normalize=True 一起使用:
df['gender'].value_counts(normalize=True) * 100
结果是 (0, 1] 范围内的一个分数。我们在这里乘以 100 以获得 %。
【解决方案3】:
找出目标变化与不平衡/不平衡的百分比。
g = data[Target_col_Y]
df = pd.concat([g.value_counts(),
g.value_counts(normalize=True).mul(100)],axis=1,keys=('counts','percentage'))
print (df)
计数百分比
0 36548 88.734583
1 4640 11.265417
在此处找到列百分比的最大值,以检查那里的#imbalance 有多少
df1=df.diff(periods=1,axis=0)
difvalue=df1[[list(df1.columns)[-1]]].max()
【解决方案4】:
假设有 200 个值,其中 120 个被归类为 M,80 个被归类为 F
1)
df['gender'].value_counts()
output:
M=120
F=80
2)
df['gender'].value_counts(Normalize=True)
output:
M=0.60
F=0.40
3)
df['gender'].value_counts(Normalize=True)*100 #will convert output to percentages
output:
M=60
F=40
【解决方案5】:
print('(Gender Male= 0):\n {}%'.format(100 - round(df['Gender'].mean()*100, 2)))
print('(Gender Female=1):\n{}%'.format(round(df['Gender'].mean()*100, 2)))