Панды - Нахождение Дубликат значения столбца - PullRequest
0 голосов
/ 24 апреля 2019

Я искал два разных метода, чтобы найти повторяющееся значение столбца в df.

Сначала выясните, существует ли значение в столбце, основанное на условии другого столбца, в другом значении df.Если в df_1 в df_2

существует какой-либо идентификатор с одинаковыми временами, например

df_1

id |       time  
ab23 2019-04-17 01:00:00
bv63 2019-04-16 22:00:00

df_2

id |     time  
ab23 2019-04-17 01:00:00
bv63 2019-04-16 22:00:00

также, чтобы проверить, существует ли такой же идентификатор в том же столбце в том же DF, независимо от других столбцов.Итак, чтобы увидеть, есть ли в df_1 какой-либо идентификатор дубликатов в том же самом df.

Я пытаюсь увидеть, есть ли идентификаторы с дубликатами в одном и том же df, а также на основе того условия, что они имеют одинаковые id и время в разных dfs.

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Пример настройки:

import pandas as pd

df1 = pd.DataFrame({
    'id':['a','a','c'],
    'time':[pd.Timestamp('2019-04-17 01:00:00'),
            pd.Timestamp('2019-04-18 22:00:00'),
            pd.Timestamp('2019-04-16 22:00:00')]
})

df2 = pd.DataFrame({
    'id':['e','f'],
    'time':[pd.Timestamp('2019-04-17 01:00:00'), pd.Timestamp('2019-04-02 22:00:00')]
})

проверить, существует ли один и тот же идентификатор в том же столбце в той же самой df независимо от любого другого столбца.

dupes = df1['id'].duplicated()
df1['id'][dupes]

Если в df_1 любой идентификатор с таким же временем в столбце времени существует в df_2

matches = df1['time'].isin(df2['time'])
df1['id'][matches]
0 голосов
/ 24 апреля 2019

Если вы хотите игнорировать данные индекса. Преобразуйте содержимое фреймов данных в наборы кортежей, содержащих столбцы:

ds1 = set([tuple(line) for line in df1.values])
ds2 = set([tuple(line) for line in df2.values])

Этот шаг также избавит от любых дубликатов во фреймах данных (индекс игнорируется)

set([(1, 2), (3, 4), (2, 3)])   # ds1

может затем использовать методы set, чтобы найти что-нибудь. Например, чтобы найти различия:

ds1.difference(ds2)
gives: set([(1, 2), (3, 4)])

при необходимости может вернуть это обратно на фрейм данных. Примечание: необходимо преобразовать набор в список 1-й, так как набор нельзя использовать для построения кадра данных:

pd.DataFrame(list(ds1.difference(ds2)))
...