【问题标题】:Return order of unique values in a pandas column熊猫列中唯一值的返回顺序
【发布时间】:2018-09-05 07:28:05
【问题描述】:

我正在尝试找到一种更有效的方法来返回 unique 中的 index 值在 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')

但我仍然需要更改它才能找到第二、第三个唯一值。有没有更有效的方法?

【问题讨论】:

  • 预期输出是什么?

标签: python pandas unique


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    IIUC,你可以使用:

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

    更新

    或者感谢@Josh Friedlanders 的建议更新:

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

    【讨论】:

    • 或者更简单,df[~df.Volume.duplicated(keep=False)].index
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2018-06-25
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多