## How to perform element wise operation on two sets of columns in pandas

I have the dataframe:

c1 | c2 | c3 | c4 5 | 4 | 9 | 3

How could I perform element wise division (or some other operation) between c1/c2 and c3/c4

So that the outcome is:

.5555 | 1.33333

I've tried:

df[['c1', 'c2']].div(df[['c3', 'c4']], axis='index'))

But that just resulted in NaNs.

One solution is to drop down to NumPy and create a new dataframe:

res = pd.DataFrame(df[['c1', 'c2']].values / df[['c3', 'c4']].values) print(res) 0 1 0 0.555556 1.333333

**How to multiply two pandas DataFrame columns in Python,** operator(*). The mul() method provides a parameter fill_value using which values can be passed to replace the np. Yes, a dataframe with 2 columns, one for the outcome of c1/c3 and the other for the outcome of c2/c4. Sorry I wasn't clear. – JavaNewb Nov 6 at 19:59

I'm not positive I'm understanding your question correctly , but you can literally just divide the series.

df['c1/c2'] = df['c1'] / df['c2']

See this answer: How to divide two column in a dataframe

EDIT: Okay, I understand what OPs asking now.. Please see other answer.

**How to Split a Column into Two Columns in Pandas?,** to perform quick element-wise operations, both with basic arithmetic (addition, will preserve index and column labels in the output, and for binary operations of the two input arrays, which could be determined using standard Python set How to perform element wise operation on two sets of columns in pandas. Columnwise operation on multiple mapped columns using pandas November 2019 .

Pretty straightforward, just divide by the values

df[['c1', 'c2']]/df[['c3','c4']].values

Orders matter, so make sure to use correct ordering in the denominator. No need to recreate the DataFrame

**Multiplying a DataFrame with another DataFrame, Series or a ,** Get Multiplication of dataframe and other, element-wise (binary operator mul ). Whether to compare by the index (0 or 'index') or columns (1 or 'columns'). If data in both corresponding DataFrame locations is missing the result will be One of the essential pieces of NumPy is the ability to perform quick element-wise operations, both with basic arithmetic (addition, subtraction, multiplication, etc.) and with more sophisticated operations (trigonometric functions, exponential and logarithmic functions, etc.).

**Operating on Data in Pandas,** is the ability to perform quick elementwise operations, both with basic index and column labels in the output, and for binary operations such as could be determined using standard Python set arithmetic on these indices: Create a new column in Pandas DataFrame based on the existing columns While working with data in Pandas, we perform a vast array of operations on the data to get the data in the desired form. One of these operations could be that we want to create new columns in the DataFrame based on the result of some operations on the existing columns in the DataFrame.

**pandas.DataFrame.multiply,** Pandas dataframe.mul() function return multiplication of dataframe and other Syntax: DataFrame.mul(other, axis='columns', level=None, fill_value=None) fill_value : Fill existing missing (NaN) values, and any new element needed If data in both corresponding DataFrame locations is missing the result will be missing. DataFrame.multiply(self, other, axis='columns', level=None, fill_value=None) [source] ¶. Get Multiplication of dataframe and other, element-wise (binary operator mul ). Equivalent to dataframe * other, but with support to substitute a fill_value for missing data in one of the inputs. With reverse version, rmul.

**Operations in Pandas – O'Reilly,** Syntax: DataFrame.add(other, axis='columns', level=None, fill_value=None). Parameters Notice the output above, no addition took place for the nan cells in the df dataframe.add() function has an attribute fill_value . First set the seed to regenerate the result Let's perform element-wise addition of these two data frames. According to NumPy’s broadcasting rules (see Section X.X), subtration between a two-dimensional array and one of its rows is applied row-wise. In Pandas, the convention similarly operates row-wise by default: df = pd.DataFrame(A, columns=list('QRST')) df - df.iloc[0]