如何在熊猫数据框中删除所有重复出现的事件或获取唯一值?

时间:2019-04-02 00:04:54

标签: python pandas numpy dataframe

我有一个熊猫数据框,其中多次出现特定值。我想删除所有重复的值或用NaN替换,最后得到具有任意数量的唯一值的列的名称。熊猫drop_duplicates函数仅删除具有重复值的行,但我想删除数据框中的值/单元格。有解决方案吗?

基于下面的输入数据框,列“ 02”的第一行以外的所有值在数据帧中均重复出现,因此列“ 02”是我想要的。如果问题不清楚,请告诉我。谢谢。

DF: 02 03:10 03:02 03:02:09 0 6716 45355 45355 45355 1 4047 4047 7411 7411 2 945 2478 2478 945
预期产量: col_with_unique_val =“ 02”

Expected output DF: 
      02  03:10  03:02  03:02:09
  0  6716  NaN NaN NaN 
  1  NaN NaN NaN NaN 
  2  NaN NaN NaN NaN 

Expected output DF: 
    02
0  6716

2 个答案:

答案 0 :(得分:3)

这是一种方法

df.mask(df.apply(pd.Series.duplicated,keep=False,axis=1))
       02  03:10  03:02  03:02:09
0  6716.0    NaN    NaN       NaN
1     NaN    NaN    NaN       NaN
2     NaN    NaN    NaN       NaN

df.mask(df.apply(pd.Series.duplicated,keep=False,axis=1)).stack().index.get_level_values(1)
Index(['02'], dtype='object')

答案 1 :(得分:2)

stack,然后检查重复项。 where使所有非唯一NaN

df1 = df.stack()
uniques = df1[~df1.duplicated(keep=False)].tolist()

df.where(df.isin(uniques))
#       02  03:10  03:02  03:02:09
#0  6716.0    NaN    NaN       NaN
#1     NaN    NaN    NaN       NaN
#2     NaN    NaN    NaN       NaN

df.isin(uniques).any().loc[lambda x: x].index
#Index(['02'], dtype='object')