Sam
Sam

Reputation: 113

Apply function with string and integer from multiple columns not working

I want to create a combined string based on two columns, one is an integer and the other is a string. I need to combine them to create a string.

I've already tried using the solution from this answer here (Apply function to create string with multiple columns as argument) but it doesn't give the required output. H

I have two columns: prod_no which is an integer and PROD which is a string. So something like

| prod_no | PROD  | out           |   |   |
|---------|-------|---------------|---|---|
| 1       | PRODA | @Item=1=PRODA |   |   |
| 2       | PRODB | @Item=2=PRODB |   |   |
| 3       | PRODC | @Item=3=PRODC |   |   |

to get the last column, I used the following code:

prod_list['out'] = prod_list.apply(lambda x: "@ITEM={}=={}"
         .format(prod_list.prod_no.astype(str), prod_list.PROD), axis=1)

I'm trying to produce the column "out" but the result of that code is weird. The output is @Item=0 1 22 3...very odd. I'm specifically trying to implement using apply and lambda. However, I am biased to efficient implementations since I am trying to learn how to write optimized code. Please help :)

Upvotes: 1

Views: 141

Answers (2)

anky
anky

Reputation: 75080

you can also try with zip:

df=df.assign(out=['@ITEM={}=={}'.format(a,b) for a,b in zip(df.prod_no,df.PROD)])
#or directly : df.assign(out='@Item='+df.prod_no.astype(str)+'=='+df.PROD)

   prod_no   PROD             out
0        1  PRODA  @ITEM=1==PRODA
1        2  PRODB  @ITEM=2==PRODB
2        3  PRODC  @ITEM=3==PRODC

Upvotes: 1

Rakesh
Rakesh

Reputation: 82765

This works.

import pandas as pd

df= pd.DataFrame({"prod_no": [1,2,3], "PROD": [ "PRODA", "PRODB", "PRODC" ]})
df["out"] = df.apply(lambda x: "@ITEM={}=={}".format(x["prod_no"], x["PROD"]), axis=1)
print(df)

Output:

    PROD  prod_no             out
0  PRODA        1  @ITEM=1==PRODA
1  PRODB        2  @ITEM=2==PRODB
2  PRODC        3  @ITEM=3==PRODC

Upvotes: 2

Related Questions