[力扣每日一练]字符串的拼接操作

题目要求:

表:cities

+-------------+---------+
| Column Name | Type    | 
+-------------+---------+
| state       | varchar |
| city        | varchar |
+-------------+---------+
(state, city) 是这张表的主键(有不同值的列的组合)。
这张表的每一行包含州名和其中的城市名。
编写一个解决方案来 查找每个州的所有城市,并将它们组合成 一个逗号分隔 的字符串。

返回结果表以 state 升序 排序。

结果格式如下所示。

 

示例:

输入:

cities 表:

+-------------+---------------+
| state       | city          |
+-------------+---------------+
| California  | Los Angeles   |
| California  | San Francisco |
| California  | San Diego     |
| Texas       | Houston       |
| Texas       | Austin        |
| Texas       | Dallas        |
| New York    | New York City |
| New York    | Buffalo       |
| New York    | Rochester     |
+-------------+---------------+
输出:

+-------------+---------------------------------------+
| state       | cities                                |
+-------------+---------------------------------------+
| California  | Los Angeles, San Diego, San Francisco |
| New York    | Buffalo, New York City, Rochester     |
| Texas       | Austin, Dallas, Houston               |
+-------------+---------------------------------------+
解释:

California:所有城市 ("Los Angeles", "San Diego", "San Francisco") 以逗号分隔的字符串列出。
New York:所有城市 ("Buffalo", "New York City", "Rochester") 以逗号分隔的字符串列出。
Texas:所有城市 ("Austin", "Dallas", "Houston") 以逗号分隔的字符串列出。
注意:输出表以州名升序排序。

MySQL解法:

题目要求按照洲名进行分组,而针对城市名聚合的方式是按照某种方式对数据进行拼接。MySQL中有针对这种需求的函数:GROUP_CONCAT 该函数可以按照某种方式对字符串进行聚合拼接

# Write your MySQL query statement below
SELECT state,GROUP_CONCAT(city  ORDER BY city SEPARATOR ', ') AS cities
FROM cities
GROUP BY state

这里没有特别针对state进行排序,因为已经用state进行分组了,系统默认对该字段按照ASC方式排序,正好符合题意

pandas解法:

要拼接字符串,首先要用到str.join()函数,确定分割字符串的str符号是什么。想要将join函数应用到数据全体,可以在分组的数据后,通过聚合函数将join遍历传入到要作用的列中

import pandas as pd

def find_cities(cities: pd.DataFrame) -> pd.DataFrame:
    cities=cities.sort_values(by='city')
    cities=cities.groupby('state')['city'].agg(lambda x:', '.join(x)).reset_index(name='cities')
    cities=cities.sort_values(by='state')
    return cities

这里分组后,通过agg聚合函数,针对city列,利用lambda遍历函数将join函数应用到分组后的city列全部数据,实现分组后的字符串拼接

你可能感兴趣的:(leetcode,数据分析,sql,python,pandas,mysql)