23

I have a Pandas DataFrame like following:

 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 

I want to get the count of a certain values across columns. So my expected output is something like:

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 

I know how to this across rows, but doing this for columns is bit strange?Help me to solve this? Thanks.

1
  • @OP, would you consider accepting a more performant answer if it was given? Commented Jan 23, 2019 at 10:39

2 Answers 2

36

stack it first and then use 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 
Sign up to request clarification or add additional context in comments.

1 Comment

Only pandas Series can use value_counts(). By using df.stack(), you transformed his DataFrame into a Series. Your solution is correct, but knowing why it worked helped me out a lot.
2
df['Counts'] = df[['col1','col2','col3']].groupby(['col1','col2','col3']).transform('count') 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.