Вы можете получить value_counts
для обоих столбцов 3 и 4, смешав их вместе:
df[['3','4']].melt().value.value_counts(normalize=True) * 100
Вывод:
N 57.142857
Y 42.857143
Name: value, dtype: float64
Это дает количество раз Y
и N
отображаются в столбцах 3 или 4 в процентах от общего количества записей в обоих столбцах.Если вместо этого вы хотите, чтобы число раз N
или Y
отображалось в обоих столбцах, можно объединить строки в каждом столбце и затем подсчитать комбинации:
(df['3'] + df['4']).value_counts(normalize=True) * 100
Вывод:
NY 57.142857
NN 28.571429
YY 14.285714
dtype: float64
Тестирование
Вот полный код, который я использовал для генерации выходных данных в ответе выше:
import pandas as pd
from io import StringIO
d = '''0 1 2 3 4
A Y N N Y
B N Y N N
C N N N N
D Y Y N Y
E N Y Y Y
F Y Y N Y
G Y N N Y'''
df = pd.read_csv(StringIO(d), sep='\s+')
totalcount = df[['3','4']].melt().value.value_counts(normalize=True) * 100
print('percentage of times each value appears as an entry in either column\n%s\n' % totalcount)
paircount = (df['3'] + df['4']).value_counts(normalize=True) * 100
print('percentage of times each pair of values occurs across columns\n%s\n' % paircount)