ID代表同一事物的级别。这意味着数据集在每个样本中都有许多重复项。我希望保留最长的ID值,因为它包含的信息最多。
df_test=pd.DataFrame({'ID':[
"k__",
"k__|p__|c__|o__",
"k__|p__|c__|o__|f__",
"k__|p__|c__|o__|f__|g_",
"k__|p__|c__|o__|f__|g_|s__",
"k__|p__|c__|o__|f__|g_|s__|a"],
'sample_1':[95,3.64,3.64,3.1,3.1,3.1],
'sample_2':[93,2.45,2.45,4.5,4.5,4.5],
'sample_3':[93,2.45,2.45,4.5,4.5,7.5]}) ID sample_1 sample_2 sample_3
0 k__ 95.00 93.00 93.00
1 k__|p__|c__|o__ 3.64 2.45 2.45
2 k__|p__|c__|o__|f__ 3.64 2.45 2.45
3 k__|p__|c__|o__|f__|g_ 3.10 4.50 4.50
4 k__|p__|c__|o__|f__|g_|s__ 3.10 4.50 4.50
5 k__|p__|c__|o__|f__|g_|s__|a 3.10 4.50 7.50我的处理方法是删除重复项,保留最后一次出现的重复项(在ID列中包含最多数据),并逐个样本设置子集:
sample_cols = [col for col in df_test.columns if 'sample' in col]
df_test.drop_duplicates(subset=sample_cols, keep='last') ID sample_1 sample_2 sample_3
0 k__ 95.00 93.00 93.00
2 k__|p__|c__|o__|f__ 3.64 2.45 2.45
4 k__|p__|c__|o__|f__|g_|s__ 3.10 4.50 4.50
5 k__|p__|c__|o__|f__|g_|s__|a 3.10 4.50 7.50对于样本1和2,在索引4和5处发生的情况是,当另一列或样本包含不同的值时,会留下重复的值。
pandas中有没有一种方法可以检查0轴上是否有重复的值,以便用0填充最后一个匹配项:
ID sample_1 sample_2 sample_3
0 k__ 95.00 93.00 93.00
2 k__|p__|c__|o__|f__ 3.64 2.45 2.45
4 k__|p__|c__|o__|f__|g_|s__ 0 0 4.50
5 k__|p__|c__|o__|f__|g_|s__|a 3.10 4.50 7.50发布于 2020-11-04 03:27:09
我使用的是df.duplicated:documentation on pandas duplicated
首先删除重复项并保留最后一行(工作原理与代码中相同,只是一行代码):
df_test = df_test[df_test.iloc[:,1:].duplicated(keep = 'last') == False]
df_test
ID sample_1 sample_2 sample_3
0 k__ 95.00 93.00 93.00
2 k__|p__|c__|o__|f__ 3.64 2.45 2.45
4 k__|p__|c__|o__|f__|g_|s__ 3.10 4.50 4.50
5 k__|p__|c__|o__|f__|g_|s__|a 3.10 4.50 7.50然后,对于零的替换:
for sample in df_test.iloc[:,1:]:
df_test.loc[df_test[sample].duplicated(keep = 'last'), sample] = 0
df_test
ID sample_1 sample_2 sample_3
0 k__ 95.00 93.00 93.00
2 k__|p__|c__|o__|f__ 3.64 2.45 2.45
4 k__|p__|c__|o__|f__|g_|s__ 0.00 0.00 4.50
5 k__|p__|c__|o__|f__|g_|s__|a 3.10 4.50 7.50它确实出现了一个警告,这是我无法避免的,但它确实可以按预期工作
https://stackoverflow.com/questions/64665064
复制相似问题