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. держать = "первый"
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