当前位置: 代码迷 >> python >> 如何过滤出列中的重复值(每行)
  详细解决方案

如何过滤出列中的重复值(每行)

热度:90   发布时间:2023-06-16 10:16:59.0

如何使用以下条件在数据帧中用np.nan替换特定值:如果一列的值在任何后续列中重复,则其初次出现应由np.nan

例如,

VD_1    VD_2    VD_3     VD_4
Test    Sun     Test     None
Sun     Sun     Fun      Fun
Big     Sand    Fun      Big

结果将是这样的:

VD _1   VD_2    VD_3   VD_4
None    Sun     Test   None
None    Sun     None   Fun
None    Sand    Fun    Big

我应该使用drop_duplicateskeep等于last吗?

采用:

  • 如有必要, 字符串NoneNaN
  • apply
  • 列名称

df = df.replace({'None':np.nan})
      .apply(lambda x:x.drop_duplicates(keep='last'), axis=1)
      .reindex(columns=df.columns)

print (df)
   VD_1  VD_2  VD_3 VD_4
0   NaN   Sun  Test  NaN
1   NaN   Sun   NaN  Fun
2   NaN  Sand   Fun  Big

首先转置数据帧并使用 。 该选项可以保留最后一个值。 必须对每一列进行此操作,然后最终将输出连接在一起。

df_t= df_item.T
clone= df_t[0].drop_duplicates(keep='last').tolist()
cltwo= df_t[1].drop_duplicates(keep='last').tolist()
cl3= df_t[2].drop_duplicates(keep='last').tolist()

print   pd.DataFrame([clone,cltwo,cl3]) 

输出

  0     1     2
0   Sun  Test  None
1   Sun   Fun  None
2  Sand   Fun   Big

我认为这将达到目的:

df = df.apply(lambda x: [x.values[i] if x.values[i] not in x.values[i+1:] else np.nan for i in range(len(x))], axis=1)
  相关解决方案