Pandas — поиск повторяющегося значения столбца

#python #python-3.x #pandas #conditional #data-analysis

#python #python-3.x #pandas #условные операторы #анализ данных

Вопрос:

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

Сначала нужно определить, существует ли значение в столбце, основанное на условии другого столбца, в другом df. Если в df_1 любой идентификатор с одинаковыми временами в столбце time существует в 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, а также исходя из условия, что они имеют одинаковый идентификатор и время в разных dfs.

Ответ №1:

Настроить пример:

 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 любой идентификатор с одинаковыми временами в столбце time существует в df_2

 matches = df1['time'].isin(df2['time'])
df1['id'][matches]
  

Ответ №2:

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

 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)])
  

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

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