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列,会怎么样?是否可以有相同数量的列,只放置一个而不是第一个重复,始终保留最后一个唯一值?很好。非常感谢。是否有可能拥有相同数量的列,并且只放置一个而不是第一个副本,始终保留最后一个唯一值?太好了。非常感谢你。