Mam ramkę danych, która rejestruje odpowiedzi 19717 osób na wybór języków programowania za pomocą pytań wielokrotnego wyboru. Pierwsza kolumna to oczywiście płeć respondenta, a reszta to wybory, które wybrali. Dlatego jeśli wybiorę Python, moja odpowiedź zostanie zapisana w kolumnie Python, a nie bash i odwrotnie.
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
Chcę tabeli, która zwraca liczbę wystąpień każdej kategorii w Gender
rekordach. Dlatego jeśli 5000 mężczyzn zakodowanych w Pythonie i 3000 kobiet w JS, powinienem uzyskać:
Gender Python Bash R JavaScript C++
Male 5000 1000 800 1500 1000
Female 4000 500 1500 3000 800
Prefer Not To Say 2000 ... ... ... 860
Wypróbowałem niektóre z opcji:
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
I nie jest to wymagane, jak opisano powyżej. Czy można to zrobić w pandach?
Gender
indeksu.Załóżmy, że twoja
nan
jestNaN
(tzn. Nie jest łańcuchem), możemy skorzystać,count
ponieważ ignorujeNaN
ona uzyskanie pożądanego wynikuźródło
Możesz
melt
i używaszcrosstab
źródło
Przejdźmy do jednej linii
źródło