pandas get the row-wise minimum value of two or more columns

PythonPandasDataframe

Python Problem Overview


How can I reference the minimum value of two dataframes as part of a pandas dataframe equation? I tried using the python min() function which did not work. I'm sorry if this is well-documented somewhere but I have not been able to find a working solution for this problem. I am looking for something along the lines of this:

data['eff'] = pd.DataFrame([data['flow_h'], data['flow_c']]).min() *Cp* (data[' Thi'] - data[' Tci'])

I also tried to use pandas min() function, which is also not working.

min_flow = pd.DataFrame([data['flow_h'], data['flow_c']]).min()

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

I was confused by this error. The data columns are just numbers and a name, I wasn't sure where the index comes into play.

import pandas as pd
import numpy as np

np.random.seed(365)
rows = 10
flow = {'flow_c': [np.random.randint(100) for _ in range(rows)],
        'flow_d': [np.random.randint(100) for _ in range(rows)],
        'flow_h': [np.random.randint(100) for _ in range(rows)]}
data = pd.DataFrame(flow)

# display(data)
   flow_c  flow_d  flow_h
0      82      36      43
1      52      48      12
2      33      28      77
3      91      99      11
4      44      95      27
5       5      94      64
6      98       3      88
7      73      39      92
8      26      39      62
9      56      74      50

Python Solutions


Solution 1 - Python

If you are trying to get the row-wise mininum of two or more columns, use pandas.DataFrame.min and specify axis=1.

data['min_c_h'] = data[['flow_h','flow_c']].min(axis=1)

# display(data)
   flow_c  flow_d  flow_h  min_c_h
0      82      36      43       43
1      52      48      12       12
2      33      28      77       33
3      91      99      11       11
4      44      95      27       27
5       5      94      64        5
6      98       3      88       88
7      73      39      92       73
8      26      39      62       26
9      56      74      50       50

Solution 2 - Python

If you like to get a single minimum value of multiple columns:

data[['flow_h','flow_c']].min().min()

the first "min()" calculates the minimum per column and returns a pandas series. The second "min" returns the minimum of the minimums per column.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkilojoulesView Question on Stackoverflow
Solution 1 - PythonHappy001View Answer on Stackoverflow
Solution 2 - Pythonb0lleView Answer on Stackoverflow