Вычисление числа ненулевых в столбце, соответствующем другому столбцу - PullRequest
0 голосов
/ 02 октября 2018

У меня есть фрейм данных:

 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

1 Ответ

0 голосов
/ 02 октября 2018

Использование:

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)

df = (df.set_index('class')
       .ne(0)
       .stack()
       .groupby(level=[0,1])
       .value_counts()
       .unstack(1)
       .sort_index(level=1, ascending=False)
       .T)
print (df)
class     1     0     1     0
      True  True  False False
A         2     1     1     2
B         2     2     1     1

df.columns = list('abcd')
print (df)
   a  b  c  d
A  2  1  1  2
B  2  2  1  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...