我有一个DataFrame
,其排列方式类似于:
ID Sample_1 Sample_2
A 0.182 0.754
B 0.182 0.754
C 0.182 0.01
D 0.182 0.2
E 0.9 0.2
如您所见,有一些重复值(“真”测量值)和单个值(实际上是“坏”测量值),我需要做的是用NA替换所有唯一值(即所谓的“坏”值),这需要对所有列进行。
换句话说,最终的 Dataframe 应该如下所示:
ID Sample_1 Sample_2
A 0.182 0.754
B 0.182 0.754
C 0.182 NaN
D 0.182 0.2
E NaN 0.2
我考虑过的一个可能的解决方案是使用groupby
和filter
来获取索引值(就像Get indexes of unique values in column (pandas)中那样),然后替换这些值,但问题是它一次只能用于一列:
unique_loc = df.groupby("Sample_1").filter(lambda x: len(x) == 1).index
df.loc[unique_loc, "Sample_1"] = np.nan
这意味着它需要在许多列中重复(实际数据中有许多列)。有没有更有效的解决方案?
2条答案
按热度按时间hmae6n7t1#
对于集合
NaN
s使用DataFrame.where
,其中掩码由Series.duplicated
针对DataFrame.apply
中的每列创建,对于选择所有列而不使用DataFrame.iloc
:如果
ID
是索引:olmpazwi2#
一种选择是通过
np.unique
获取这些值,并将其替换为pd.DataFrame.mask
: