Мы часто выполняем операции соединения, объединения, различия, пересечения и т. д. между кадрами данных 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 / Intersection
left.merge(right, on='key')
#Outer Join / Union
left.merge(right, on='key', how='outer')
#Left outer join / Left join - keys from left are used
left.merge(right, on='key', how='left')
#Right outer join / Right join - keys from right are used
left.merge(right, on='key', how='right')
#In case of different key column names
left2.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

В нашем случае

Простым подходом к разнице было бы;

# Using isin with tuple
df1[~df1.apply(tuple,1).isin(df2.apply(tuple,1)) #OR
df1[~df1.astype(str).apply(tuple, 1).isin(df2.astype(str).apply(tuple, 1))] #If df contains, nan
# merge with indicator
df1.merge(df2,indicator = True, how='left').loc[lambda x : x['_merge']!='both']

выход:

Методы установки Python

Заключение

В этой статье вы познакомились с концепциями множеств и их представлением с помощью диаграмм Венна. Мы также рассмотрели набор основных операций, таких как объединение, пересечение, объединение и различие, и то, как мы можем применить эту логику и концепции для фреймов данных Python для наших задач по науке о данных.

Спасибо за чтение!

Рекомендации