我有一个熊猫数据框,其中多次出现特定值。我想删除所有重复的值或用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
答案 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')