Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 将轴0上的重复项替换为0_Pandas_Numpy - Fatal编程技术网

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

Pandas 将轴0上的重复项替换为0,pandas,numpy,Pandas,Numpy,ID表示同一事物的级别。这意味着数据集在每个样本中都有许多重复项。我想保留最长的ID值,因为它包含的信息最多 df_test=pd.DataFrame({'ID':[ "k__", "k__|p__|c__|o__", "k__|p__|c__|o__|f__",

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_cols = [col for col in df_test.columns if 'sample' in col]
df_test.drop_duplicates(subset=sample_cols, keep='last')
尽管在样本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


我使用了
df。重复的
::

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

然后用零替换:

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
它确实给出了一个警告,这是我无法避免的,但它确实起到了预期的作用

     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

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