python - 如何使用for循环,if-else合并两个文件?

标签 python pandas for-loop if-statement merge

来自以下数据:

data01 =

pos     ids      sample1_value   sample2_value
2969    a:b:c    12:13:15        12:13:15
3222    a:b:c    13:13:16        21:33:41
3416    a:b:c    19:13:18        21:33:41
5207    a:b:c    11:33:41        91:33:41
5238    a:b:c    21:13:45        31:27:63
5398    a:b:c    31:27:63        28:63:41
5403    a:b:c    15:7:125        71:33:41
5426    a:b:c    12:13:25        82:25:14
5434    a:b:c    12:17:15        52:33:52

假设我为每个样本计算了另一个 id (d) 值,但不是在每一行中。

data02 = 

pos     ids      sample1_value    sample2_value
2969    d        21               96
3416    d        52               85
5207    d        63               85
5398    d        27               52
5403    d        63               52
5434    d        81               63

问题:

我想为每个样本的每一行写下这个 d 的值。

是否可以使用 for 循环写回值?

预期的最终输出:

pos     ids       sample1_value    sample2_value
2969    a:b:c:d   12:13:15:21      12:13:15:.
3222    a:b:c:d   13:13:16:.       21:33:41:.
3416    a:b:c:d   19:13:18:52      21:33:41:.
................................
.......................... in the same way as above

我仅针对 sample01 尝试了以下代码:

data01 = open('data01.txt', 'r')
header01 = data01.readline()
data01 = data01.read().rstrip('n').split('\n')

# similar code for data02

data01_new = open('data01_new.txt', 'w')
data01_new.write(header01 + '\n')


for lines in data01:
    values01 = lines.split('\t')
    pos01 = values01[0]
    ids01 = values01[1]
    sample1_val01 = values01[2]

    for lines in data02:
        values02 = lines.split('\t')
        pos02 = values02[0]
        ids02 = values02[1]
        sample1_val02 = values02[2]

        if pos01 == pos02:
            data01_update = open('data01_new.txt', 'a')
            data01_update.write('\t'.join(pos1, (ids01+':'+ids02), sample1_val01+':'+sample1_val02)

        else:
            data01_update = open('data01_new.txt', 'a')
            data01_update.write('\t'.join(pos1, (ids01+':'+ids02), sample1_val01+':'+'.')
  • 我知道嵌套循环浪费了很多时间,使用文件大小的乘积。
  • 我的 if/else 逻辑用匹配项更新行,但后来被不匹配项覆盖。

是否可以使用 for-loop 和 if-else 来解决这个问题?

如果没有,我该如何使用 pandas 解决这个问题?

最佳答案

这里有一种方法,先合并pos上的两个数据,然后加入ids,sample1和sample 2,最后只使用需要的列

data = data1.merge(data2, on = 'pos',how = 'outer').fillna('.')

data['ids'] = data['ids_x'] + ':'+ data['ids_y']
data['sample1_value'] = data['sample1_value_x'].astype(str) + ':'+ 
data['sample1_value_y'].astype(str)
data['sample2_value'] = data['sample2_value_x'].astype(str) + ':'+ 
data['sample2_value_y'].astype(str)
data = data[['pos', 'ids', 'sample1_value', 'sample2_value']]


    pos     ids     sample1_value   sample2_value
0   2969    a:b:c:d 12:13:15:21.0   12:13:15:96.0
1   3222    a:b:c:. 13:13:16:.      21:33:41:.
2   3416    a:b:c:d 19:13:18:52.0   21:33:41:85.0
3   5207    a:b:c:d 11:33:41:63.0   91:33:41:85.0
4   5238    a:b:c:. 21:13:45:.      31:27:63:.
5   5398    a:b:c:d 31:27:63:27.0   28:63:41:52.0
6   5403    a:b:c:d 15:7:125:63.0   71:33:41:52.0
7   5426    a:b:c:. 12:13:25:.      82:25:14:.
8   5434    a:b:c:d 12:17:15:81.0   52:33:52:63.0

关于python - 如何使用for循环,if-else合并两个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44059470/

相关文章:

python - 如何使用 for 循环将首次使用日期存储在字典中

c++ - C++中的'rand'函数?

Python 字典键顺序与推导式

python - 根据另一列的数据更改时区

python / Selenium : Switch to an alert and verify the text within

python - 根据调整其他列的权重创建新列

python - 如何在 pandas groupby 中组合连接的字符串

python - 如何复制 Django 模型实例和所有相关数据

python - 并行化 pandas 函数 pd.concat

python - 矩阵向量差的有效元素级argmin