У меня есть фрейм данных, в котором записаны ответы людей, выбравших языки программирования 19717 года на вопросы с несколькими вариантами ответов. В первом столбце, конечно, указывается пол респондента, а в остальных - выбор, который они выбрали. И, следовательно, если я выберу Python, мой ответ будет записан в столбце Python, а не в bash и наоборот.
ID Gender Python Bash R JavaScript C++
0 Male Python nan nan JavaScript nan
1 Female nan nan R JavaScript C++
2 Prefer not to say Python Bash nan nan nan
3 Male nan nan nan nan nan
То, что я хочу, это таблица, которая возвращает количество экземпляров каждой категории в Gender
записях. Следовательно, если 5000 мужчин закодированы в Python и 3000 женщин в JS, то я должен получить это:
Gender Python Bash R JavaScript C++
Male 5000 1000 800 1500 1000
Female 4000 500 1500 3000 800
Prefer Not To Say 2000 ... ... ... 860
Я попробовал некоторые из вариантов:
df.iloc[:, [*range(0, 13)]].stack().value_counts()
Male 16138
Python 12841
SQL 6532
R 4588
Female 3212
Java 2267
C++ 2256
Javascript 2174
Bash 2037
C 1672
MATLAB 1516
Other 1148
TypeScript 389
Prefer not to say 318
None 83
Prefer to self-describe 49
dtype: int64
И это не то, что требуется, как описано выше. Можно ли это сделать в пандах?
Gender
индекса.Предположим, что вы
nan
естьNaN
(т.е. это не строка), мы можем воспользоваться этим,count
потому что он игнорирует,NaN
чтобы получить желаемый результатисточник
Вы можете
melt
и использоватьcrosstab
источник
Давайте нажмем на одну строчку
источник