问题描述
如何使用以下条件在数据帧中用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_duplicates
并keep
等于last
吗?
1楼
采用:
-
如有必要, 字符串
None
为NaN
-
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
2楼
首先转置数据帧并使用 。 该选项可以保留最后一个值。 必须对每一列进行此操作,然后最终将输出连接在一起。
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
3楼
我认为这将达到目的:
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)