Create multiple columns at once based off of existing columns

Question:

I have this dataframe df:

     name  class   
1     Bob  history
2   Chuck  math     
3   Daren  history  
4   Elisa  english 
5   Aaron  history 
6     Tom  math   
7     Dan  history 
8    Fred  english

I want to create two new columns at once which are simply the character length of the existing two columns. The result should look like this:

     name     class   name_len  class_len
1     Bob   history          3          7
2   Chuck      math          5          4
3   Daren   history          5          7
4   Elisa       art          5          3
5   Aaron   history          5          7
6     Tom      math          3          4 
7     Dan   history          3          7
8    Fred  business          4          8

I’ve tried to use for comprehension to generate the lists at once, such as so:

df[["1", "2"]] = [df[name].apply(len) for name in posts.columns]

but I get

ValueError: Columns must be same length as key

I would like to do more complex operations and create lots of new columns from pre-existing columns as such, and do not want to manually create each new column one at a time. Any help is appreciated!

Asked By: You_Donut

||

Answers:

No need to use apply, .str.len() should work:

for col in df.columns:
    df[f"{col}_len"] = df[col].str.len()

df
    name    class  name_len  class_len
1    Bob  history         3          7
2  Chuck     math         5          4
3  Daren  history         5          7
4  Elisa  english         5          7
5  Aaron  history         5          7
6    Tom     math         3          4
7    Dan  history         3          7
8   Fred  english         4          7
Answered By: Psidom
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.