[每日一练]关于不同列之间的字符串拼接

#该题目来源于力扣:

2504. 把名字和职业联系起来 - 力扣(LeetCode)

题目要求:

表: Person

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| person_id   | int     |
| name        | varchar |
| profession  | ENUM    |
+-------------+---------+
person_id 是该表的主键(具有唯一值的列)。
该表中的每一行都包含一个人的 ID、姓名和职业。
profession 是 ENUM 类型,其值为 ('Doctor', 'Singer', 'Actor', 'Player', 'Engineer', 'Lawyer') 之一。
 

编写一个解决方案报告每个人的名字,后面是他们职业的第一个字母,用括号括起来。

返回按 person_id 降序排列 的结果表。

返回结果格式示例如下。

 

示例 1:

输入: 
Person 表:
+-----------+-------+------------+
| person_id | name  | profession |
+-----------+-------+------------+
| 1         | Alex  | Singer     |
| 3         | Alice | Actor      |
| 2         | Bob   | Player     |
| 4         | Messi | Doctor     |
| 6         | Tyson | Engineer   |
| 5         | Meir  | Lawyer     |
+-----------+-------+------------+
输出: 
+-----------+----------+
| person_id | name     |
+-----------+----------+
| 6         | Tyson(E) |
| 5         | Meir(L)  |
| 4         | Messi(D) |
| 3         | Alice(A) |
| 2         | Bob(P)   |
| 1         | Alex(S)  |
+-----------+----------+
解释: 请注意,在名称和职业的第一个字母之间不应该有任何空白。

SQL解法:

利用concat函数就像字符串的拼接,由于要拼接的是name全部字符串和profession列的第一个字符串,可以使用left函数来获取,最后拼接即可:

# Write your MySQL query statement below
select person_id,concat(name,"(",LEFT(profession,1),")") as name
from Person 
order by person_id desc

PYTHON解法:

python并没有直接拼接字符串的内置函数,但我们可以通过自定义函数自己定义一个,然后用apply的方式遍历传入到表格中。在自定义的函数中,可以通过定义表格的列数据返回的格式,来进行字符串的拼接,大概如下:

def 自定义函数名(表格名字参数):
    return f{"表格名字[被拼接的列名]..."}

套用这个自定义函数,即可实现需求:

import pandas as pd

def concatenate_info(person: pd.DataFrame) -> pd.DataFrame:
    def contect_str(row):
        return f"{row['name']}({row['profession'][0]})"
    #注意:这里按照行的方向进行应用
    person['name']=person.apply(contect_str,axis=1)
    return person[['person_id','name']].sort_values('person_id',ascending=False)
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值