Реализация group_concat в SQL с использованием Pandas

pandas SQL
Реализация group_concat в SQL с использованием Pandas

Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер

Всем привет, меня зовут Питер~

Эта статья — третья статья, сравнивающая SQL для изучения Pandas, в основном объясняет, как использовать pandas для реализации SQL в SQL.group_concatработать.

group_concat

Какова функция group_concat в SQL или MySQL? См. пример для иллюстрации.

Ниже приведены простые данные, хранящиеся в таблице информации, двух полях id и name:

+----+-----+
| id | name |
+------+---+
|1  | 10   |
|1  | 20   |
|1  | 20   |
|2  | 20   |
|3  | 200  |
|3  | 500  |

Способ 1: ситуация по умолчанию

Группируем по id, ставим имя на той же строке и разделяем запятой:

select 
    id
    ,group_concat(name)  as name
from information 
group by id;

Результат:

|id|  name|
|1 |10,20,20|
|2 |20      |
|3 |200,500|

Способ 2: укажите символ

Приведенные выше результаты разделены запятыми (английскими запятыми) по умолчанию, также мы можем сами указать символы:

select 
    id
    ,group_concat(name separator ';')  as name
from information 
group by id;

Результат отображается как:

|id|  name|
|1 |10;20;20|   -- 分号隔开
|2 |20      |
|3 |200;500|

Способ 3: дедублировать отображение

Мы также можем сгруппировать по id, удалить лишние (дублирующиеся) данные, а остальные собрать воедино, например, данные с id=1 повторяются по 20, а мы хотим отобразить только одну 20:

Добавлено ключевое слово отличное:

select 
    id
    ,group_concat(distinct name)  as name
from information 
group by id;

Соответствующие результаты отображаются как:

|id|  name|
|1 |10,20|   -- 只显示了一个20
|2 |20    |
|3 |200,500|

Способ 4: Сортировка по убыванию

Во всех вышеперечисленных случаях данные расположены в порядке возрастания, мы также можем расположить их в порядке убывания:

select 
    id
    ,group_concat(name order by name desc)  as name  
from information 
group by id;

Тогда отображаемый результат:

-- 结果已经降序排列了

|id|  name|
|1 |20,20,10|
|2 |20    |
|3 |500,200|

Вышеупомянутое является результатом различных реализаций group_concat, которые реализованы с использованием приведенных ниже панд.

Данные моделирования

import pandas as pd
import numpy as np
df = pd.DataFrame({
  "name":["小明","小明","小明","小红","小张","小张"],
  "score":[10,20,20,20,200,500]
})

df

Понятно, что нам нужно сгруппировать оценки Сяомин, Сяохун и Сяочжан вместе.

Способ 1: группировка по умолчанию

Реализуйте ситуацию группировки по умолчанию, сортируя по возрастанию без дедупликации. В основном 3 шага:

1. Группировать по группам

2. После группировки поместите все партитуры в список через список

3. Третий шаг — просто переставить индекс

Способ 2: укажите символ

Чтобы указать конкретные символы, мы используем функцию соединения. Поскольку эта функция может работать только со строками, нам нужно преобразовать числовые данные в df в строки:

df.astype(str)

Способ 3: дедублировать отображение

Сгруппируйте по полю имени, а затем используйте уникальную функцию для оценки. Следующее просто так переставлено

Способ 4: Сортировка по убыванию

1. Сначала мы реализуем порядок возрастания по умолчанию

2. Снова используйте функцию применения в поле оценки и используйте функцию сортировки в списке для достижения убывающего порядка.

Дорогие друзья, вы узнали?