MMT Marathi
MMT Marathi

Reputation: 31

Pandas Min and Max Across Rows

I have a dataframe that looks like below. I want to get a min and max value per city along with the information about which products were ordered min and max for that city. Please help.

Dataframe

Dataframe

Upvotes: 2

Views: 3061

Answers (3)

Joe Ferndz
Joe Ferndz

Reputation: 8508

MMT Marathi, based on the answers provided by Danil and Sutharp777, you should be able to get to your answer. However, I see you have questions for them. Not sure if you are looking for a column to be created that has the min/max value for each row.

Here's the full dataframe with the solution. I am merely compiling the answers they have already given

import pandas as pd
d = [['20in Monitor',2,2,1,2,2,2,2,2,2],
     ['27in 4k Gaming Monitor',2,1,2,2,1,2,2,2,2],
     ['27in FHD Monitor',2,2,2,2,2,2,2,2,2],
     ['34in Ultrawide Monitor',2,1,2,2,2,2,2,2,2],
     ['AA Batteries (4-pack)',5,5,6,7,6,6,6,6,5],
     ['AAA Batteries (4-pack)',7,7,8,8,9,7,8,9,7],
     ['Apple Airpods Headphones',2,2,3,2,2,2,2,2,2],
     ['Bose SoundSport Headphones',2,2,2,2,3,2,2,3,2],
     ['Flatscreen TV',2,1,2,2,2,2,2,2,2]]
c = ['Product','Atlanta','Austin','Boston','Dallas','Los Angeles',
     'New York City','Portland','San Francisco','Seattle']
df = pd.DataFrame(d,columns=c)
df['min_value'] = df.min(axis=1)
df['max_value'] = df.max(axis=1)
print (df)

The output of this will be:

                      Product  Atlanta  Austin  ...  Seattle  min_value  max_value
0                20in Monitor        2       2  ...        2          1          2
1      27in 4k Gaming Monitor        2       1  ...        2          1          2
2            27in FHD Monitor        2       2  ...        2          2          2
3      34in Ultrawide Monitor        2       1  ...        2          1          2
4       AA Batteries (4-pack)        5       5  ...        5          5          7
5      AAA Batteries (4-pack)        7       7  ...        7          7          9
6    Apple Airpods Headphones        2       2  ...        2          2          3
7  Bose SoundSport Headphones        2       2  ...        2          2          3
8               Flatscreen TV        2       1  ...        2          1          2

If you want the min and max of each column, then you can do this:

print ('min of each column :', df.min(axis=0).to_list()[1:])
print ('max of each column :', df.max(axis=0).to_list()[1:])

This will give you:

min of each column : [2, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2]
max of each column : [7, 7, 8, 8, 9, 7, 8, 9, 7, 7, 9]

Upvotes: 1

pradeexsu
pradeexsu

Reputation: 1145

use Dataframe.min and Datafram.max

DataFrame.min(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)
DataFrame.max(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)
matrix = [(22, 16, 23),
          (33, 50, 11),
          (44, 34, 11),
          (55, 35, 60),
          (66, 36, 13)
          ]
dfObj = pd.DataFrame(matrix, index=list('abcde'), columns=list('xyz'))
    x     y     z
a  22  16.0  23.0
b  33   50  11.0
c  44  34.0  11.0
d  55  35.0   60
e  66  36.0  13.0

Get a series containing the minimum value of each row

minValuesObj = dfObj.min(axis=1)
print('minimum value in each row : ')
print(minValuesObj)

output

minimum value in each row : 
a    16.0
b    11.0
c    11.0
d    35.0
e    13.0
dtype: float64

Upvotes: 2

Danil Melnikov
Danil Melnikov

Reputation: 316

db.min(axis=0) - min value for each column
db.min(axis=1) - min value for each row 

Upvotes: 2

Related Questions