在具有以下数据结构的文件中:
输入文件低于数据,直到列(PB)。
contig pos GT PGT PID PG PB updated_Block
2 5426 0/1 0|1 5398 1|0 1311 1311
2 5427 0/1 0|1 5398 0/1 . 1311
2 5434 0/1 0|1 5398 1|0 1311 1311
2 5454 0/1 0|1 5398 0/1 . 1311
2 5457 0/0 . . 0/0 . .
2 5467 0/1 0|1 5467 0|1 1311 1311
2 5480 0/1 0|1 5467 0|1 1311 1311
2 5483 0/0 0|1 5482 0/0 1667 1667
2 5518 1/1 1|1 5467 1/1 . 1311
2 5519 0/0 . . 0/0 . .
2 5547 1/1 1|1 5467 1/1 . 1311
2 5550 ./. . . ./. . .
2 5559 1/1 1|1 5467 1/1 . 1311
2 5561 0/0 . . 0/0 . .
2 5576 0/1 0|1 5576 1|0 1311 1311
2 5599 0/1 0|1 5576 1|0 1311 1311
2 5602 0/0 . . 0/0 . .
2 5657 0/1 . . 1|0 1311 1311
2 5723 0/1 . . 1|0 1311 1311
2 6414 0/1 . . 0|1 1667 1667
2 6446 0/1 0|1 6446 0|1 1667 1667
2 6448 0/1 0|1 6446 0|1 1667 1667
2 6465 0/1 0|1 6446 0|1 1667 1667
2 6636 0/1 . . 1|0 1667 1667
2 6740 0/1 . 6740 0|1 1667 1667
输出文件是输入数据加上最后一列(我需要计算)。
PID表示块,PGT表示由一个特定程序生成的该块中的一个数据。 另一个程序为同一数据集生成相同类型的信息 - PB是块,PG是该块中的数据之一。 这两个程序根据不同的概率测试发出值和阻止信息。
因此,从以上数据输出:属于块PB(1311)的数据来自与PID(5398,5467和5576)相同的块。我只需要合并尽可能多的块来制作最大可能的块。所以,我只需要找到重叠的块并合并它们以创建一个更大的块集。 更新的块应该看起来像最后一列(我用手键入)。
详细信息: PB中的1311与来自PID的5398,5467,5576重叠 - 因此它们构成一个大块。您可以看到PID(5398)在某些行中与PB(1311)相关联,这意味着任何具有PID(5398)但缺少PB的行实际上属于PB(1311),因为PID之前与之关联。更新的块可以具有与PB相同的唯一值。
我对如何解决这个问题很困惑。我想首先建立一个字典列表,但是在读取每一行之前我仍然会遇到一些问题,直到不能生成大块,之后我们开始读取其他块值以制作另一个最大的块。
以下是部分解决方案:
我可以创建另一个文件或数据对象:
PB_PID_group = data_frame.groupby("PI")["PID"].unique()
给了我:
PI
. [., 5398, 5482, 5467]
1311 [5185, ., 5398, 5467, 5576]
1667 [., 6446]
3352 [.]
935 [.]
Name: PID, dtype: object
我必须删除上面输出中的第一行和其他行中的periods(.)
。 但是,这仍然不是表格格式的数据。我还需要解决这个问题。
所以,现在我加载两个文件并逐行读取这两个文件:
file_1 = file_1.split('\n')
file_2 = file_2.split('\n')
for line in file_1 and file_2:
again split lines by tabs and then
PB_file1 = file_1[6]
PID_file1 = file_1[4]
PB_file2 = file_2[0]
PID_file2 = file_2[1].split(', ')
现在,我搜索并更新update_PB中的值
if PB_file1 is an integer:
update_PB = PB_file1
elif:
PB_file1 = '.'
if PID_file1 in PID_file2:
update_PB = PB_file2
else:
update_PB = '.'
因此,这个搜索和更新循环继续读取file_1中的第1行和file_2中的所有行;再次在file_1中的第二行和file_2中的所有行继续,直到两个文件中的所有行都完成。
任何建议。有什么帮助吗?
答案 0 :(得分:1)
好像你只是在同一个PID组上用随机PB替换句点。
ParseUser user = new ParseUser();
user.setEmail(String.valueOf(emailSignUp.getText()));
user.signUpInBackground();
从上次评论看,您似乎只想要每个PID组的最大值。
df.groupby('PID')['PB'].transform(lambda x: x.replace('.', x.sort_values()[-1]))
如果您需要使PID周期具有相应的周期条目,则将它们设置回具有以下内容的周期。
df['updated_Block'] = df.groupby('PID')['PB'].transform('max')
答案 1 :(得分:0)
我只想为每个PID创建一个字典。每个PID的PB是唯一的吗?
您可以按 PID 和 PB 分组,删除重复项和 nan 值(如果有)。然后你会有一个表 PID PB 来创建你需要的列。