2013-07-17 31 views
22

mam pandy DataFrame jak następuje:Get liczbę wartości w kolumnach-pandy DataFrame

   A    B    C 
0 192.168.2.85 192.168.2.85 124.43.113.22 
1 192.248.8.183 192.248.8.183 192.168.2.85 
2 192.168.2.161   NaN 192.248.8.183 
3 66.249.74.52   NaN 192.168.2.161 
4   NaN   NaN 66.249.74.52 

Chcę uzyskać zliczania pewnej wartości w kolumnach. Tak więc oczekiwany wynik jest następujący:

IP   Count 
192.168.2.85 3 #Since this value is there in all coulmns 
192.248.8.183 3 
192.168.2.161 2 
66.249.74.52 2 
124.43.113.22 1 

Wiem, jak to zrobić w wierszach, ale robi to dla kolumn jest nieco dziwny? Pomóż mi rozwiązać ten problem? Dzięki.

Odpowiedz

32

stack najpierw, a następnie użyć value_counts:

In [14]: df.stack().value_counts() 
Out[14]: 
192.248.8.183 3 
192.168.2.85  3 
66.249.74.52  2 
192.168.2.161 2 
124.43.113.22 1 
dtype: int64 
+0

Dzięki, jest to, czego się spodziewałem. –

+2

Tylko pandy Series mogą używać value_counts(). Używając df.stack(), przekształciłeś jego DataFrame w Serię. Twoje rozwiązanie jest poprawne, ale wiedząc, dlaczego to zadziałało, bardzo mi pomogło. – user3155053

2
df['Counts'] = df[['col1','col2','col3']].groupby(['col1','col2','col3']).transform('count') 
Powiązane problemy