Мы часто выполняем операции соединения, объединения, различия, пересечения и т. д. между кадрами данных Python. На протяжении всего моего пути к науке о данных понимание концепций теории множеств помогло мне эффективно выполнять эти задачи. В этой статье я хотел бы использовать теорию множеств для реализации операций DataFrame.
Тема обсуждения!
1. Основы «теории множеств» и «диаграмм Венна».
2. Операции с множествами на кадрах данных
3. Заключение
1. Основы «теории множеств» и «диаграмм Венна».
Мы широко используем множества и теорию множеств в математике и теории вероятностей. Простым определением будет следующее: Набор — это набор элементов, в котором порядок элементов не имеет значения. Концепция набора также используется в python, часто называемом набором как тип данных.
В python наборы очень похожи на списки, за исключением того, что их элементы являются неизменяемыми (это означает, что вы не можете изменять/мутировать элемент набора после его объявления). Однако вы можете добавлять/удалять элементы из набора. Набор может содержать элементы разных типов данных. Набор может быть;
mySet = set(("Theory", "Mathematics", 214, 3.14, (1,0,0,1)))
Мы используем диаграмму Венна для визуализации множеств. В разделе операций с наборами мы увидим, как их использовать.
2. Установите операции над DataFrames
Давайте рассмотрим два простых DataFrames, чтобы продемонстрировать логику операций над множествами.
df1 = pd.DataFrame({'price': [10,20,30,40,50,60],'quantity': [100,200,300,400,500,600], 'margin%': [1,2,3,4,5,6]}) df2 = pd.DataFrame({'price': [10,20,30,40,50,60],'quantity': [120,200,300,400,520,620], 'margin%': [7,2,3,6,11,12]})
Печать df1 и df2 выглядит так:
У нас есть два простых фрейма данных от двух разных продавцов, у которых есть цена статьи, количество статей, которые вы бы продали по этой цене, и размер прибыли.
Диаграмма Венна для представления df1 и df2:
- Оранжевый оттенок: товар/товары, которые продаются продавцом 1 по цене, количеству и марже, отличным от того, что есть у продавца 2.
Например, товар 0 продается продавцом 1 по цене 10 долл. % маржи, в то время как товар 0 продается продавцом 2 по цене 10 120 долларов США в количестве с маржой 7 %. - Синий оттенок: товары, которые продаются продавцом 2 по цене, количеству и наценке, отличным от цены, количества и маржи продавца 1.
- Серая доля: Товар(ы), которые продаются продавцом 2 и продавцом 1 по одинаковой цене, количеству и марже.
Например, товар 3 продается продавцом 1 и продавцом 2 по одинаковой цене 30 300 долларов США. в количестве с наценкой 3%.
а. Союз
объединение двух множеств — это новое множество, состоящее из всех элементов множества A или B. Например,
set A = {1,2,3,4} и set B = {3,4,5,6}
set A union set B = {1,2,3,4,5,6} часто упоминается как А∪В
В нашем случае
Простым подходом к объединению было бы;
# Union : Concat or append with duplicates pd.concat([df1, df2]) #OR df1.append(df2)
выход:
Лучшим подходом было бы;
# Union : Concat or append or merge without duplicates
pd.concat([df1,df2]).drop_duplicates().reset_index(drop=True) #OR
df1.append(df2).drop_duplicates().reset_index(drop=True) #OR
df1.merge(df2, how='outer') #left.merge(right, on='key', how='outer')
б. Перекресток
Пересечение двух множеств – это новое множество, состоящее из всех элементов множеств A и B. Например,
set A = {1,2,3,4} и set B = {3,4,5,6}
set A union set B = {3,4}, часто называемый A∩B
В нашем случае
Простой подход пересечения был бы;
pd.merge(df1, df2, how='inner') #OR
df1.merge(df2) #left.merge(right, on='key')
выход:
Пересечение — это операция внутреннего соединения, а объединение — операция внешнего соединения двух фреймов данных. Другие операции соединения:
#Inner Join / Intersectionleft.merge(right, on='key')
#Outer Join / Unionleft.merge(right, on='key', how='outer')
#Left outer join / Left join -
keys from left are usedleft.merge(right, on='key', how='left')
#Right outer join / Right join -
keys fromright
are usedleft.merge(right, on='key', how='right')
#In case of different key column namesleft2.merge(right2, left_on='keyLeft', right_on='keyRight', how='inner')
#To see all possible options ("left_only", "right_only" or "both") left.merge(right, how='outer', suffixes=['', '_'], indicator=True)
Для более сложных операций объединения
в. Разница
Множество A−B состоит из элементов, которые есть в A, но не в B. Например,
установите A = {1,2,3,4} и установите B = {3,4,5,6}
установите разницу B = {1,2}, часто называемую AB
В нашем случае
Простым подходом к разнице было бы;
# Usingisin
withtuple
df1[~df1.apply(tuple,1).isin(df2.apply(tuple,1)) #ORdf1[~df1.astype(str).apply(tuple, 1).isin(df2.astype(str).apply(tuple, 1))] #If df contains, nan
#merge
withindicator df1.merge(df2,indicator = True, how='left').loc[lambda x : x['_merge']!='both']
выход:
Заключение
В этой статье вы познакомились с концепциями множеств и их представлением с помощью диаграмм Венна. Мы также рассмотрели набор основных операций, таких как объединение, пересечение, объединение и различие, и то, как мы можем применить эту логику и концепции для фреймов данных Python для наших задач по науке о данных.
Спасибо за чтение!