Процент Pandas по значению в столбце

Я хочу получить процент от определенного значения в столбце df. Скажем, у меня есть df с (col1, col2, col3, gender) гендерный столбец имеет значения M или F. Я хочу получить процент значений M и F в df.

Я пробовал это, что дает мне число экземпляров M и F, но я хочу, чтобы они были в процентах от общего числа значений в df.

df.groupby('gender').size()

Может кто-нибудь помочь?

Ответ 1

Используйте value_counts с normalize=True:

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

Ответ 2

Если вам не нужно искать значения M и F отличные от gender столбца, возможно, вы можете попробовать использовать 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

Ответ 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 относятся к категории М, а 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