首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将轴0上的重复项替换为0

将轴0上的重复项替换为0
EN

Stack Overflow用户
提问于 2020-11-03 22:45:08
回答 1查看 30关注 0票数 0

ID代表同一事物的级别。这意味着数据集在每个样本中都有许多重复项。我希望保留最长的ID值,因为它包含的信息最多。

代码语言:javascript
复制
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]})
代码语言:javascript
复制
            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列中包含最多数据),并逐个样本设置子集:

代码语言:javascript
复制
sample_cols = [col for col in df_test.columns if 'sample' in col]
df_test.drop_duplicates(subset=sample_cols, keep='last')
代码语言:javascript
复制
     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填充最后一个匹配项:

代码语言:javascript
复制
     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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-04 03:27:09

我使用的是df.duplicateddocumentation on pandas duplicated

首先删除重复项并保留最后一行(工作原理与代码中相同,只是一行代码):

代码语言:javascript
复制
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

然后,对于零的替换:

代码语言:javascript
复制
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

它确实出现了一个警告,这是我无法避免的,但它确实可以按预期工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64665064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档