Scala中动态拼接DataFrame指定列生成新列的实现方案
动态指定DataFrame列并拼接生成新列
问题描述
我有一个存储DataFrame列名的动态列表(元素数量不固定,示例:list_name=["name","email"]),还有一个包含多列的Pandas DataFrame(示例df包含name、email、phone列)。需要将列表中指定列的字段值拼接,生成一个新列,新列名为列表中列名的拼接结果(示例新列名:nameemail)。
示例输入
| name | phone | |
|---|---|---|
| ram | ram@gmail.com | 345897045 |
| raj | raj@gmail.com | 658086657 |
预期输出
| name | phone | nameemail | |
|---|---|---|---|
| ram | ram@gmail.com | 345897045 | ramram@gmail.com |
| raj | raj@gmail.com | 658086657 | rajraj@gmail.com |
解决方案
直接通过Pandas的apply方法按行拼接指定列,同时动态生成新列名:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ "name": ["ram", "raj"], "email": ["ram@gmail.com", "raj@gmail.com"], "phone": [345897045, 658086657] }) # 动态列名列表 list_name = ["name", "email"] # 生成新列名 new_col_name = ''.join(list_name) # 拼接指定列的值,确保转为字符串避免类型错误 df[new_col_name] = df[list_name].apply(lambda row: ''.join(row.astype(str)), axis=1) print(df)
代码说明
- 动态生成新列名:用
''.join(list_name)直接将列表中的列名拼接成新列的名称,适配任意长度的列名列表。 - 按行拼接列值:使用
apply方法指定axis=1按行处理,row.astype(str)确保所有列值转为字符串类型(比如示例中的phone列是数值类型,转换后才不会报错),再用''.join()拼接每行的指定列内容。 - 灵活性:无论
list_name包含2个还是更多列名,代码都能自动处理,比如list_name=["name", "phone"]会生成namephone列,值为name和phone的拼接结果。
内容的提问来源于stack exchange,提问作者Sandhru Tygon
相关产品推荐
相关产品推荐

