У меня есть фрейм данных:
d = {'class': [0, 1,1,0,1,0], 'A': [0,4,8,1,0,0],'B':[4,1,0,0,3,1]}
df = pd.DataFrame(data=d)
, который выглядит как -
A B class
0 0 4 0
1 4 1 1
2 8 0 1
3 1 0 0
4 0 3 1
5 0 1 0
Я хочу вычислить для каждого столбца соответствующие a, b, c, d, которые не являютсяненулевое значение в столбце, соответствующем столбцу класса 1, ненулевое значение в столбце, соответствующем столбцу класса 0, нулевое значение в столбце, соответствующем столбцу класса 1, нулевое значение в столбце, соответствующем столбцу класса 0
например-
for column A the a,b,c,d are 2,1,1,2
объяснение- В столбце A мы видим, что там, где столбец [класс] = 1, число ненулевых значений в столбце A равно 2, поэтому a = 2 (индексы 1,2).Точно так же b = 1 (индексы 3)
Моя попытка (когда датафрейм был равен no 0 и 1 класса) -
dataset = pd.read_csv('aaf.csv')
n=len(dataset.columns) #no of columns
X=dataset.iloc[:,1:n].values
l=len(X) #no or rows
score = []
for i in range(n-1):
#print(i)
X_column=X[:,i]
neg_array,pos_array=np.hsplit(X_column,2)##hardcoded
#print(pos_array.size)
a=np.count_nonzero(pos_array)
b=np.count_nonzero(neg_array)
c= l/2-a
d= l/2-b