#该题目来源于力扣:
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)