Публичный аккаунт WeChat: «Python Reading Finance»
Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте сообщение в публичном аккаунте
При ежедневном анализе данных часто необходимоРазделите на разные группы в соответствии с (несколькими) полямиНапример, в области электронной коммерции общий объем продаж страны делится по провинциям, и анализируются изменения продаж в каждой провинции. В Pandas в основном используются вышеперечисленные операции обработки данныхgroupby
Готово, эта статья познакомитgroupby
Основной принцип и соответствующиеagg
,transform
иapply
работать.
Для удобства последующих диаграмм используются 10 выборочных данных, сгенерированных моделированием, коды и данные следующие:
company=["A","B","C"]
data=pd.DataFrame({
"company":[company[x] for x in np.random.randint(0,len(company),10)],
"salary":np.random.randint(5,50,10),
"age":np.random.randint(15,50,10)
}
)
company | salary | age | |
---|---|---|---|
0 | C | 43 | 35 |
1 | C | 17 | 25 |
2 | C | 8 | 30 |
3 | A | 20 | 22 |
4 | B | 10 | 17 |
5 | B | 21 | 40 |
6 | A | 23 | 33 |
7 | C | 49 | 19 |
8 | B | 8 | 30 |
Во-первых, основной принцип Groupby
В пандах код для реализации операции группировки очень прост, требуется только одна строка кода, Здесь приведенный выше набор данныхcompany
Поля разделены:
In [5]: group = data.groupby("company")
Введите вышеуказанный кодipython
, вы получитеDataFrameGroupBy
объект
In [6]: group
Out[6]: <pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002B7E2650240>
что это породилоDataFrameGroupBy
Что это? правильноdata
Проведенныйgroupby
Что произошло после этого?ipython
Возвращаемый результат — это его адрес в памяти, что не способствует интуитивному пониманию.group
Что именно находится внутри, здесь положитьgroup
преобразовать вlist
Взгляните на форму:
In [8]: list(group)
Out[8]:
[('A', company salary age
3 A 20 22
6 A 23 33),
('B', company salary age
4 B 10 17
5 B 21 40
8 B 8 30),
('C', company salary age
0 C 43 35
1 C 17 25
2 C 8 30
7 C 49 19)]
После преобразования в вид списка видно, что список состоит из трех кортежей, и в каждом кортеже первым элементом является группа (здесь согласноcompany
Группировка, поэтому окончательно разделена наA
,B
,C
), второй элемент находится в соответствующей группеDataFrame
, весь процесс можно проиллюстрировать следующим образом:
заключить,groupby
процесс заключается в преобразовании исходногоDataFrame
в соответствии сgroupby
поле (вотcompany
), разделенный на несколько分组DataFrame
, разбитых на столько групп, сколько их分组DataFrame
. ** Итак, вgroupby
После ряда операций (например,agg
,apply
д.), исходя из子DataFrame
операция. **Понимая это, вы можете в принципе понять, что есть в Pandas.groupby
Основной принцип работы. Давайте поговорим оgroupby
Обычные операции после этого.
2. операция агрегирования
Совокупные операцииgroupby
После очень распространенной операции можно было бы написатьSQL
Друзья должны быть хорошо знакомы с этим. Операции агрегирования можно использовать для суммирования, среднего, максимума, минимума и т. д. В следующей таблице перечислены общие операции агрегирования в Pandas.
функция | использовать |
---|---|
min | минимум |
max | максимальное значение |
sum | сумма |
mean | значит |
median | медиана |
std | среднеквадратичное отклонение |
var | дисперсия |
count | считать |
Для примера набора данных, если я хочу найти средний возраст и среднюю зарплату сотрудников в разных компаниях, я могу следовать приведенному ниже коду:
In [12]: data.groupby("company").agg('mean')
Out[12]:
salary age
company
A 21.50 27.50
B 13.00 29.00
C 29.25 27.25
Если вы хотите найти разные значения для разных столбцов, например, для расчета среднего возраста и медианной зарплаты сотрудников в разных компаниях, вы можете использовать словарь для указания операции агрегирования:
In [17]: data.groupby('company').agg({'salary':'median','age':'mean'})
Out[17]:
salary age
company
A 21.5 27.50
B 10.0 29.00
C 30.0 27.25
agg
Процесс агрегации можно проиллюстрировать следующим образом (второй пример является примером):
Три, трансформация
transform
Какие манипуляции с данными? иagg
какие отличия есть? для лучшего пониманияtransform
иagg
Следующие сравнения сделаны из реальных сценариев применения.
вышеagg
В мы научились находить среднюю зарплату сотрудников в разных компаниях.Если нам теперь нужно добавить новый столбец в исходный набор данныхavg_salary
,представлятьСредняя заработная плата компании, в которой работает сотрудник (работники одной компании имеют одинаковую среднюю заработную плату), как этого добиться? Если вы выполняете обычные шаги для расчета, вам нужно сначала получить среднюю заработную плату в разных компаниях, а затем заполнить соответствующую должность в соответствии с соответствующими отношениями между сотрудником и компанией.transform
Если это так, код реализации выглядит следующим образом:
In [21]: avg_salary_dict = data.groupby('company')['salary'].mean().to_dict()
In [22]: data['avg_salary'] = data['company'].map(avg_salary_dict)
In [23]: data
Out[23]:
company salary age avg_salary
0 C 43 35 29.25
1 C 17 25 29.25
2 C 8 30 29.25
3 A 20 22 21.50
4 B 10 17 13.00
5 B 21 40 13.00
6 A 23 33 21.50
7 C 49 19 29.25
8 B 8 30 13.00
При использованииtransform
Если это так, требуется только одна строка кода:
In [24]: data['avg_salary'] = data.groupby('company')['salary'].transform('mean')
In [25]: data
Out[25]:
company salary age avg_salary
0 C 43 35 29.25
1 C 17 25 29.25
2 C 8 30 29.25
3 A 20 22 21.50
4 B 10 17 13.00
5 B 21 40 13.00
6 A 23 33 21.50
7 C 49 19 29.25
8 B 8 30 13.00
Или посмотрите на это графическиgroupby
Заднийtransform
Процесс реализации (для более наглядного отображения на рисунке добавленыcompany
столбец, на самом деле только в соответствии с приведенным выше кодомsalary
Список):
Большая коробка на картинкеtransform
иagg
разные, даagg
, будет рассчитанA
,B
,C
Среднее значение, соответствующее компании и возвращенное напрямую, но дляtransform
, будетПолучите соответствующий результат для каждого фрагмента данных, и выборки в одной группе будут иметь одинаковое значение., после вычисления среднего внутри группы будетв порядке исходного индексаВерните результат, если вы не поняли, вы можете сделать эту фотографию иagg
Сравните это.
4. применить
apply
Это должен быть старый друг каждого, его сравнивают сagg
иtransform
Он более гибкий и может передавать любую пользовательскую функцию для реализации сложных операций с данными. существуетОбработка данных Pandas по трем осям — карта, применение, применениеПодробная карта), введенныйapply
использовать, что вgroupby
после использованияapply
В чем отличие от того, что было представлено ранее?
Отличия есть, но весь принцип реализации в основном одинаков. Разница между ними в том, что дляgroupby
Послеapply
, с группировкой子DataFrame
Основной единицей операции является передача указанной функции в качестве параметра.DataFrame
, а введенный ранееapply
Основной единицей работы являетсяSeries
. Или представить делоgroupby
Послеapply
использование.
Предположим, мне сейчас нужно получить данные самого старшего сотрудника каждой компании, как этого добиться? Этого можно добиться с помощью следующего кода:
In [38]: def get_oldest_staff(x):
...: df = x.sort_values(by = 'age',ascending=True)
...: return df.iloc[-1,:]
...:
In [39]: oldest_staff = data.groupby('company',as_index=False).apply(get_oldest_staff)
In [40]: oldest_staff
Out[40]:
company salary age
0 A 23 33
1 B 21 40
2 C 43 35
Таким образом получаются данные самого старшего сотрудника каждой компании.Весь процесс проиллюстрирован следующим образом:
Как видите, здесьapply
В основном он такой же, как и принцип действия, представленный в предыдущей статье, за исключением того, что параметры, передаваемые в функцию,Series
стал здесь分组DataFrame
.
Наконец, оapply
использовать, вот небольшое предложение, хотя говоряapply
обладает большей гибкостью, ноapply
будет более эффективным, чемagg
иtransform
Помедленнее. так,groupby
можно использовать позжеagg
иtransform
Проблема, которую необходимо решить, состоит в том, чтобы сначала использовать эти два метода и рассматривать возможность их использования только в том случае, если она не может быть решена.apply
работать.
Отсканируйте код, чтобы подписаться на официальный аккаунт"Питон Чтение Финансов", получите галантерейные товары в первый раз, и вы также можете присоединиться к группе обмена обучением Python! !