Порядок возврата уникальных значений в столбце панд - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь найти более эффективный способ вернуть значения index из unique в pandas df

Для df ниже я хочу вернуть индекс первого раза, когда происходит уникальное значение.

import pandas as pd
import numpy as np

d = ({
    'Day' : ['Mon','Mon','Tues','Mon','Tues','Wed'],                                
     })

df = pd.DataFrame(data=d)

Я могу вручную подсчитать индекс уникального значения и вернуть ниже:

first = df.iloc[0].Location
second = df.iloc[2].Location 
third = df.iloc[5].Location    

Я думал сделать что-то вроде

first = (df['Day'] == 'Mon')

Но мне все еще нужно изменить это, чтобы найти 2-е, 3-е уникальное значение. Есть ли более эффективный метод?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Если хотите отфильтровать все уникальные значения индекса, используйте drop_duplicates с keep=False:

print (df['Day'].drop_duplicates(keep=False))
5    Wed
Name: Day, dtype: object

print (df['Day'].drop_duplicates(keep=False).index)
Int64Index([5], dtype='int64')

Или:

print (df.index[~df['Day'].duplicated(keep=False)])
Int64Index([5], dtype='int64')

Если хотите отфильтровать первые уникальные значения, используйте только drop_duplicates:

print (df['Day'].drop_duplicates())
0     Mon
2    Tues
5     Wed
Name: Day, dtype: object

print (df['Day'].drop_duplicates().index)
Int64Index([0, 2, 5], dtype='int64')
0 голосов
/ 05 сентября 2018

IIUC, вы можете использовать:

df['Day'].mask(df['Day'].duplicated(keep=False)).dropna().index

Обновление

Или обновление благодаря предложению @Josh Friedlanders:

df[~df['Day'].duplicated(keep=False)].index
...