在pandas列中返回唯一值的顺序

时间:2018-09-05 07:28:05

标签: python pandas unique

我试图找到一种更有效的方法来返回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 个答案:

答案 0 :(得分:1)

IIUC,您可以使用:

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

更新

或者通过@Josh Friedlanders的建议进行更新:

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

答案 1 :(得分:0)

如果要过滤所有唯一索引值,请使用drop_duplicateskeep=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')