Maddy
Maddy

Reputation: 174

Multiple columns difference of 2 Pandas DataFrame

I am new to Python and Pandas , can someone help me with below report.

I want to report difference of N columns and create new columns with difference value, is it possible to make it dynamic as I have more than 30 columns. (Columns are fixed numbers, rows values can change)

A and B can be Alpha numeric

enter image description here

Upvotes: 0

Views: 2047

Answers (3)

Alex
Alex

Reputation: 19104

The 'ID' column should really be an index. See the Pandas tutorial on indexing for why this is a good idea.

df1 = df1.set_index('ID')
df2 = df2.set_index('ID')

df = df1.copy()
df[['C', 'D']] = df2 - df1
df['B'] = 0

print(df)

outputs

     A  B  C    D
ID               
0   10  0  5  3.0
1   11  0  6  5.0
2   12  0  7  5.0

Upvotes: 2

jezrael
jezrael

Reputation: 862761

Use join with sub for difference of DataFrames:

#if columns are strings, first cast it
df1 = df1.astype(int)
df2 = df2.astype(int)

#if first columns are not indices
#df1 = df1.set_index('ID')
#df2 = df2.set_index('ID')

df = df1.join(df2.sub(df1).add_prefix('sum'))
print (df)
     A    B  sumA  sumB
ID                     
0   10  2.0     5   3.0
1   11  3.0     6   5.0
2   12  4.0     7   5.0

Or similar:

df = df1.join(df2.sub(df1), rsuffix='sum')
print (df)
     A    B  Asum  Bsum
ID                     
0   10  2.0     5   3.0
1   11  3.0     6   5.0
2   12  4.0     7   5.0

Detail:

print (df2.sub(df1))
    A    B
ID        
0   5  3.0
1   6  5.0
2   7  5.0

Upvotes: 2

BENY
BENY

Reputation: 323286

IIUC

df1[['C','D']]=(df2-df1)[['A','B']]
df1
Out[868]: 
   ID   A    B  C    D
0   0  10  2.0  5  3.0
1   1  11  3.0  6  5.0
2   2  12  4.0  7  5.0
df1.assign(B=0)
Out[869]: 
   ID   A  B  C    D
0   0  10  0  5  3.0
1   1  11  0  6  5.0
2   2  12  0  7  5.0

Upvotes: 2

Related Questions