Графическая обработка повторяющихся значений Pandas

pandas
Графическая обработка повторяющихся значений Pandas

12_Graphical Pandas обработка повторяющихся значений

Для обработки повторяющихся значений в pandas используются две функции:

  • дублированный(): определить, есть ли повторяющиеся значения
  • drop_duplicates() : удаляет повторяющиеся значения

Серийные статьи Pandas

Статьи Pandas были опубликованы в серии, приглашаем подписаться и прочитать:

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

В этой статье моделируются два разных набора данных:

1. Данные заказа, которые будут использованы позже

import pandas as pd
import numpy as np

# 导入一份模拟数据:待用

df1 = pd.read_excel("订单重复值.xlsx")
df1

2. Еще одна копия смоделированных данных:

df2 = pd.DataFrame(np.ones([10,2]),  # 生成6*2的全部为1的数据
                   columns=["col1","col2"]
                  )
df2

Добавлено еще два поля: все они выбираются случайным образом из списка и заменяются выборкой

# 增加两列
list1 = ["a","b"]
list2 = [2,3]

# 在列表中随机选择10个元素,有放回抽样
df2["col3"] = np.random.choice(list1,10)  
df2["col4"] = np.random.choice(list2,10)

df2

duplicated()

Функция функции состоит в том, чтобы проверить, есть ли в данных повторяющиеся значения.Он используется, чтобы отметить, дублируются ли значения в серии и строки в DataFrame.Дубликат - это Истина, а дубликат - Ложь.

Каждая строка данных сравнивается с предыдущими записями.

грамматика

Для данных типа DataFrame:

pandas.DataFrame.duplicated(subset=None,keep='first')

Или для данных серии:

pandas.Series.duplicated(keep='first')

Существует три интерпретации значения параметра keep:

  • first: пометить дубликаты как True, за исключением первого вхождения
  • last: пометить дубликаты как True, кроме последнего
  • False: пометить все дубликаты как True

Определите, какие данные дублируются

Эту функцию можно использовать для определения того, какие данные повторяются: повторение помечается как True, в противном случае — False.

подмножество параметров

df2.duplicated(subset=["col3"])  # 单独看col3列是否重复

# 结果
0    False
1     True
2    False
3     True
4     True
5     True
6     True
7     True
8     True
9     True
dtype: bool
  
df2.duplicated(subset=["col1"])  # 单独看col1:全部是1,后面全部是重复的
0    False
1     True
2     True
3     True
4     True
5     True
6     True
7     True
8     True
9     True
dtype: bool

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

df2.duplicated(subset=["col3","col4"])  # 同时看col3和col4

0    False
1     True
2    False
3     True
4     True
5     True
6     True
7    False
8    False
9     True
dtype: bool

сохранить параметр

df2.duplicated(subset=["col3"],keep="last") 

0     True
1     True
2     True
3     True
4     True
5     True
6     True
7    False   # 第一次出现
8     True
9    False   # 第一次出现
dtype: bool

  • Приведенный выше параметр keep использует last, что эквивалентно тому, что последний фрагмент данных является начальным значением, и предыдущее значение сравнивается с ним, чтобы увидеть, есть ли повторяющиеся значения.
  • Первое (по умолчанию), используемое командой keep в следующем случае, эквивалентно обработке первого вхождения данных как начального значения, а последующие данные сравниваются с ним; если повторение помечено как True
df2.duplicated(subset=["col3"],keep="first")   # 默认是first

0    False  # 第一次出现
1     True
2    False  # 第一次出现
3     True
4     True
5     True
6     True
7     True
8     True
9     True
dtype: bool
  
df2.duplicated(subset=["col3"],keep=False)   # 将所有的重复值标记为True

0    True
1    True
2    True
3    True
4    True
5    True
6    True
7    True
8    True
9    True
dtype: bool

drop_duplicates()

Что делает эта функция, так это удаляет повторяющиеся значения в данных

грамматическая форма

  • подмножество: Указывает, что повторяющиеся значения удаляются в соответствии с одним или несколькими указанными атрибутами столбца, необязательно; по умолчанию — все атрибуты столбца
  • сохранить: указывает, что данные сохраняются после удаления повторяющихся значений, по умолчанию сохраняются первые данные.
  • inplace: указывает, следует ли удалять дубликаты для создания копий или изменять исходные данные напрямую. Функция этого параметра такая же, как и в функции pandas.
  • ingoore_index: индекс сгенерированных метаданных данных или расположение натуральных чисел от 0, 1, 2... до n-1.

Ниже приводится пояснение параметров с официального сайта:

Все используют параметры по умолчанию

Приведенные выше результаты имеют две характеристики:

  • Индекс по-прежнему является индексом исходных данных.
  • Сохраняемые данные являются первыми из каждого значения (если есть дубликаты)
  • Чтобы определить, повторяется ли он, используются все атрибуты столбца.
  • Приведенные выше данные являются ложными, чтобы судить о том, повторяются они или нет (по сравнению с серийным номером).

подмножество параметров

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

1. Удалить через одно атрибутивное поле

2. Удалить через несколько атрибутов поля

сохранить параметр

Параметр keep хранит нужные нам данные: первые или последние

1. держать = "первый"

image-20210712130038445

2. сохранить = «последний»

Проверьте, дублируются ли данные с помощью дубликатов (), вы можете видеть, что данные с мультииндексом 7 и 9 являются ложными, потому что они являются последним вхождением

Параметры ignore_index

Этот параметр указывает, является ли индекс сгенерированных данных индексом исходных данных или напрямую переранжирован.

параметр на месте

Если используется значение по умолчанию False:

Если inplace использует True, данные не будут генерироваться, потому что они изменяются на основе исходных данных, вызывая непосредственное изменение исходных данных: мы смотрим непосредственно на df2

Практический случай

В самом начале статьи мы импортировали данные, несколько требований:

  • Каждый заказ может иметь несколько состояний или только одно.
  • Хотим узнать все данные по заказу с итоговым статусом заказа "Передан"

Например, заказ S1, есть 3 статуса, два из которых переданы, но мы хотим получить только последние переданные данные: 2021-01-06

Решение Шаг 1: Сначала узнайте все заказы, которые прошли, и обнаружил, что не прошел только S7

Также можно узнать, какой ордер был окончательно пройден, используя следующий код:

order_pass = df1.query("状态 == '通过'")["订单号"].unique()
order_pass

Решение Шаг 2. Отфильтруйте информацию о заказе, чей окончательный статус передан.Ниже представлены два метода.

Решение Шаг 3. Дедупликация df3

df3.drop_duplicates(
  subset="订单号",  # 根据订单号去重
  keep="last",  # 保留最后一条
  inplace=True,  # 原地修改
  ignore_index=True  # 索引重排
)

df3  # 结果中没有S7