Home > front end >  How to apply operation on each column in datafarme and assign it inbetween the column
How to apply operation on each column in datafarme and assign it inbetween the column

Time:01-30

I want to apply operations on every column in a dataframe.

original data frame

c0 c1. c2.
1 2 3
2 3 4

Operation

v1=[0,1,1,2,3,4,5]

opp=(previous_column-v1)

example for creating new column next to 1st column

opp=(previous_column-v1)
opp=(1-0)
opp=1

1st value in v1 is applicable to column 1, 2nd value for 2nd column and so on.

I tried the following code for last column


df[7]=(df[6]-5)

This creates column 7 and applies the operation. What I want is to create a new columns next to existing columns and apply operation on previous column

Expected output:

c0 c1 c2. c3. c4. c5.
1. (1-0)=1 2 (2-1)=1 3. (3-1)=2
2 (2-0)=1. 3. (3-1)=1. 4. (4-1)=3.

CodePudding user response:

IIUC, you can use:

v1=[0,1,1,2,3,4,5]

# define final order of columns
order = (np.tile([0,df.shape[1]], df.shape[1])
         np.repeat(np.arange(df.shape[1]), 2)
        )

# subtract, concat, reorder
out = (pd.concat([df, df.sub(v1[:df.shape[1]]).add_suffix('_op')],
                 axis=1)
         .iloc[:, order]
       )

print(out)

Output:

   c0  c0_op  c1  c1_op  c2  c2_op
0   1      1   2      1   3      2
1   2      2   3      2   4      3

If you rather want a new column index:

v1=[0,1,1,2,3,4,5]

# define final order of columns
order = (np.tile([0,df.shape[1]], df.shape[1])
         np.repeat(np.arange(df.shape[1]), 2)
        )

# subtract, concat, reorder
out = (pd.concat([df, df.sub(v1[:df.shape[1]])],
                 axis=1, ignore_index=True)
         .iloc[:, order].set_axis(range(df.shape[1]*2), axis=1)
       )

Output:

   0  1  2  3  4  5
0  1  1  2  1  3  2
1  2  2  3  2  4  3
  • Related