How to assign new column as string to Pandas Assign

Viewed 546

How can i assign string as newcolumn to pandas.assign

Example:

newcolumn = 'myColumn'
    if(newcolumn != ''):
      sourcePandas = sourcePandas.assign(newcolumn = sourcePandas[row['PrimaryColumn']].apply(func))

Above doesn't throw any error, but creates new column with name newcolumn instead myColumn

2 Answers

Try this. Assuming sourcePandas is your dataframe,

  • Replace newcolumn = by f'{newcolumn}': inside sourcePandas.assign().
newcolumn = 'myColumn'
    if(newcolumn != ''):
      sourcePandas = sourcePandas.assign(**{f'{newcolumn}': sourcePandas[row['PrimaryColumn']].apply(func)})

Assigning Multiple Columns Simultaneously

You can assign multiple columns simultaneously as well, using df.assign(). The ** is used to unpack the dictionary and convert the constituents into a list of key-value pairs for the keyword-arguments: pandas.DataFrame.assign(self, **kwargs).

# df --> dataframe
df.assign(**{'A': np.arange(7), 'B': np.arange(7) + 2})

References

  1. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html

enter image description here

You can pass dict and then unpack dictionary using ** to pass as key-word arguments into pd.DataFrame.assign.

Ex.:

newcolumn = 'myColumn'
df = pd.DataFrame()
df.assign(**{newcolumn:[0,1,2]})
   myColumn
0         0
1         1
2         2

So it would be

newcolumn = 'myColumn'
    if(newcolumn != ''):
      sourcePandas = sourcePandas.assign(**{newcolumn: sourcePandas[row['PrimaryColumn']].apply(func)})
Related