Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
为新数据添加具有唯一标识符的列,但在python中为以前的数据维护唯一标识符_Python_Bash - Fatal编程技术网

为新数据添加具有唯一标识符的列,但在python中为以前的数据维护唯一标识符

为新数据添加具有唯一标识符的列,但在python中为以前的数据维护唯一标识符,python,bash,Python,Bash,我有一个tsv文件(第1列=唯一id,第2列=组关联),如下所示: BC187 1 L1374 1 YJM1332 1 YPS128 2 YPS606 2 YJM1273 2 UWOPS03.461.4 3 UWOPS05.217.3 3 UWOPS05.227.2 3 本质上,BC187、L1374和YJM1332都属于第1组,等等 我生成的输出是另一个独特个体列表,如下所示: Y12 DBVPG604 GE14S01.7B 我可以通过以下方式将第二个列表附加

我有一个tsv文件(第1列=唯一id,第2列=组关联),如下所示:

BC187   1 
L1374   1
YJM1332 1
YPS128  2 
YPS606  2
YJM1273 2
UWOPS03.461.4   3 
UWOPS05.217.3   3
UWOPS05.227.2   3
本质上,BC187、L1374和YJM1332都属于第1组,等等

我生成的输出是另一个独特个体列表,如下所示:

Y12
DBVPG604
GE14S01.7B
我可以通过以下方式将第二个列表附加到tsv文件:

with open('~/clade.file.txt', 'a') as f:
divergedstrain.to_csv(f, header = False, index = False)
要获取以下列表:

BC187   1 
L1374   1
YJM1332 1
YPS128  2 
YPS606  2
YJM1273 2
UWOPS03.461.4   3 
UWOPS05.217.3   3
UWOPS05.227.2   3
Y12
DBVPG604
GE14S01.7B
但现在我需要给三个新的独特个体(Y12、DBVPG604、GE14S01.7B)它们自己独特的关联,如下所示:

BC187   1 
L1374   1
YJM1332 1
YPS128  2 
YPS606  2
YJM1273 2
UWOPS03.461.4   3 
UWOPS05.217.3   3
UWOPS05.227.2   3
Y12   4 
DBVPG604   5
GE14S01.7B 6

我不确定通过python或bash实现这一点的最佳方法是什么。任何建议

这里有一种方法:

from pandas import DataFrame as df
from pandas import read_csv

file_path = 'clade.file.txt'

divergedstrain = df(["Y12", "DBVPG604", "GE14S01.7B", "Y12"])
with open(file_path, 'a') as f:
    divergedstrain.to_csv(f, header=False, index=False)

df = read_csv(file_path, header=None, delimiter=' ', skipinitialspace=True, usecols=[0, 1])

ids = {}
for index, row in df.iterrows():
    if row[0] not in ids and row[1] == row[1]:
        ids[row[0]] = row[1]


def set_and_save(curr_row):
    if curr_row[1] != curr_row[1]:
        if curr_row[0] in ids:
            curr_row[1] = ids[curr_row[0]]
        else:
            new_id = max(ids.values()) + 1
            ids[curr_row[0]] = new_id
            curr_row[1] = new_id
    return curr_row


df = df.apply(set_and_save, axis=1)
print(df)
输出:

                0    1
0           BC187  1.0
1           L1374  1.0
2         YJM1332  1.0
3          YPS128  2.0
4          YPS606  2.0
5         YJM1273  2.0
6   UWOPS03.461.4  3.0
7   UWOPS05.217.3  3.0
8   UWOPS05.227.2  3.0
9             Y12  4.0
10       DBVPG604  5.0
11     GE14S01.7B  6.0
12            Y12  4.0

以下是一种方法:

from pandas import DataFrame as df
from pandas import read_csv

file_path = 'clade.file.txt'

divergedstrain = df(["Y12", "DBVPG604", "GE14S01.7B", "Y12"])
with open(file_path, 'a') as f:
    divergedstrain.to_csv(f, header=False, index=False)

df = read_csv(file_path, header=None, delimiter=' ', skipinitialspace=True, usecols=[0, 1])

ids = {}
for index, row in df.iterrows():
    if row[0] not in ids and row[1] == row[1]:
        ids[row[0]] = row[1]


def set_and_save(curr_row):
    if curr_row[1] != curr_row[1]:
        if curr_row[0] in ids:
            curr_row[1] = ids[curr_row[0]]
        else:
            new_id = max(ids.values()) + 1
            ids[curr_row[0]] = new_id
            curr_row[1] = new_id
    return curr_row


df = df.apply(set_and_save, axis=1)
print(df)
输出:

                0    1
0           BC187  1.0
1           L1374  1.0
2         YJM1332  1.0
3          YPS128  2.0
4          YPS606  2.0
5         YJM1273  2.0
6   UWOPS03.461.4  3.0
7   UWOPS05.217.3  3.0
8   UWOPS05.227.2  3.0
9             Y12  4.0
10       DBVPG604  5.0
11     GE14S01.7B  6.0
12            Y12  4.0

是什么使元素独特,是什么使它们成为同一组的一部分?我们如何知道附加的新值不属于以前的组,或者它们之间是否共享组?嗨@implezabot!感谢您的解决方案,现在就完成它。你提出了一个很好的问题,这也是我正在研究的问题的另一个方面。但在上面的例子中,我使用基因序列差异来确定个体与先前定义的集合(例如BC187到UWOPS05.227.2)的差异程度。因此,上述个体(Y12、DBVPG604和GE14S01.7B)均被视为基于测试的分歧个体,因此是唯一的。但添加与之前定义的其他组最相似的个体是下一步:)是什么使元素独特,是什么使它们成为同一组的一部分?我们如何知道附加的新值不属于以前的组,或者它们之间是否共享组?嗨@implezabot!感谢您的解决方案,现在就完成它。你提出了一个很好的问题,这也是我正在研究的问题的另一个方面。但在上面的例子中,我使用基因序列差异来确定个体与先前定义的集合(例如BC187到UWOPS05.227.2)的差异程度。因此,上述个体(Y12、DBVPG604和GE14S01.7B)均被视为基于测试的分歧个体,因此是唯一的。但下一步是添加与之前定义的其他组最相似的个人:)
set_和_save
可以根据您的需要进行简化/修改。我将其设置为现在的状态,这样,如果两个序列相同(不确定是否是这种情况),它们将获得相同的id(这就是
ids
字典的原因)。
set\u和\u save
可以根据需要简化/修改。我将其设置为现在的状态,这样,如果两个序列相同(不确定是否相同),它们将获得相同的id(这就是
ids
字典的原因)。