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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.