应用具有多个列的字符串和整数的函数不起作用

时间:2019-06-10 09:03:28

标签: python string pandas lambda

我想基于两列创建一个组合的字符串,一个是整数,另一个是字符串。我需要结合它们来创建一个字符串。

我已经尝试过使用此答案中的解决方案(Apply function to create string with multiple columns as argument),但没有提供所需的输出。高

我有两列:prod_no是整数,PROD是字符串。所以像

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

要获取最后一列,我使用了以下代码:

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

我试图产生“ out”列,但是该代码的结果很奇怪。输出为@ Item = 0 1 22 3 ...非常奇怪。我专门尝试使用apply和lambda实施。但是,由于我试图学习如何编写优化的代码,因此我偏向于高效的实现。请帮忙:)

2 个答案:

答案 0 :(得分:2)

这有效。

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)

输出:

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

答案 1 :(得分:1)

您也可以尝试使用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
相关问题