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

Python 如何过滤列中的重复值(每行),python,pandas,Python,Pandas,如何使用以下条件在数据帧中用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

如何使用以下条件在数据帧中用
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
我是否应该使用
删除重复项
保持
等于
上次

使用:

  • 如有必要,字符串
    None
    NaN
  • 应用
  • 列名

使用:

  • 如有必要,字符串
    None
    NaN
  • 应用
  • 列名


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

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_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)

我认为这将是关键:

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)


所以它可能有更少的列?您可能需要一个新的数据框,而不是替换值。@XinHuang:是的,或者可能是相同数量的列,但没有。查看我的更新。@XinHuang:请查看我的更新。我稍微简化了一下,酷。如果一个值出现两次以上该怎么办?你是保留第二个还是最后一个?@新晃:在这种情况下,我总是想保留最后一个。所以它的列可能会少一些?您可能需要一个新的数据框,而不是替换值。@XinHuang:是的,或者可能是相同数量的列,但没有。查看我的更新。@XinHuang:请查看我的更新。我稍微简化了一下,酷。如果一个值出现两次以上该怎么办?你是保留第二个还是最后一个?@新晃:在这种情况下,我总是想保留最后一个。很好。最终解决方案的列数是否与初始数据帧的列数相同?啊哈,我看到您更改了预期的输出:)。将检查这是否可行。那么,是否可以使用
lambda
来避免
clone
cltwo
等。如果我有100列呢?很好。最终解决方案的列数是否与初始数据帧的列数相同?啊哈,我看到您更改了预期的输出:)。将检查这是否可行。那么,是否可以使用
lambda
,以避免
clone
cltwo
,等等。如果我有100列,会怎么样?是否可以有相同数量的列,只放置一个而不是第一个重复,始终保留最后一个唯一值?很好。非常感谢。是否有可能拥有相同数量的列,并且只放置一个而不是第一个副本,始终保留最后一个唯一值?太好了。非常感谢你。