Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a new column name based on a loop variable and an additional string

I want to create percentage change column for each column that is a float in my dataframe and stored it in a newn column each time with the name of the initial column and the add on "_change"

I tried this but it does not seem to work any idea?

for col in df.columns:
        if df[col].dtypes == "float":
           df[ col&'_change'] = (df.col - df.groupby(['New_ID']).col.shift(1))/ df.col

for example if my column is df["Expenses"] I would like to save the percentage change in df["Expenses_change"] Edited for adding example data frame and output

df initially

Index   ID  Reporting_Date  Sales_Am    Exp_Am
     0   1   01/01/2016        1000      900
     1   1   02/01/2016        1050      950
     2   1   03/01/2016        1060      960
     3   2   01/01/2016        2000      1850
     4   2   02/01/2016        2500      2350
     4   2   03/01/2016        3000      2850

after the loop

Index   ID  Reporting_Date  Sales_Am  Sales_Am_chge  Exp_Am  Exp_Am_chge
0        1  01/01/2016         1000     Null          900      Null
1        1  02/01/2016         1050     5%            950      6%
2        1  03/01/2016         1060     1%            960      1%
3        2  01/01/2016         2000     Null          1850     Null
4        2  02/01/2016         2500     25%           2350     27%
4        2  03/01/2016         3000     20%           2850     21%

keep in mind that i have more than 2 columns on my dataframe.

like image 944
A.Papa Avatar asked Feb 02 '18 17:02

A.Papa


People also ask

How do I create a new column in pandas based on existing column?

Create a new column by assigning the output to the DataFrame with a new column name in between the [] . Operations are element-wise, no need to loop over rows. Use rename with a dictionary or function to rename row labels or column names.

How do you create a new column in pandas and assign a value?

You can use the assign() function to add a new column to the end of a pandas DataFrame: df = df. assign(col_name=[value1, value2, value3, ...])


2 Answers

Why are you using '&' instead of '+' in

df[ col&'_change']

?

like image 179
Zach Avatar answered Sep 23 '22 21:09

Zach


String concatenation is performed in python via the + operator.

So changing to col+'_change' will fix this issue for you.

You might find it helpful to read the relevant python documentation.

like image 26
jpp Avatar answered Sep 22 '22 21:09

jpp