У меня есть такой фрейм данных
df = pd.DataFrame({'a' : [1,1,0,0], 'b': [0,1,1,0], 'c': [0,0,1,1]})
Я хочу получить
a b c
a 2 1 0
b 1 2 1
c 0 1 2
где a, b, c - имена столбцов, и я получаю значения, считающие «1» во всех столбцах, когда фильтр равен «1» в другом столбце.
Например, когда df.a == 1, мы считаем a = 2, b = 1, c = 0 и т. Д.
Я сделал цикл, чтобы решить
matrix = []
for name, values in df.iteritems():
matrix.append(pd.DataFrame( df.groupby(name, as_index=False).apply(lambda x: x[x == 1].count())).values.tolist()[1])
pd.DataFrame(matrix)
Но я думаю, что есть более простое решение, не так ли?