用熊猫连续更改值

时间:2019-01-22 14:33:53

标签: python pandas

我有一个数据框,例如:

df.columns = ["qseqid", "sseqid", "pident", "length", "mismatch", "gapopen","qstart", "qend", "sstart", "send", "evalue", "bitscore"]

最终的想法是创建一个名为strand的新列

,并且如果start中的值大于结尾,则在相应的行中添加一个+,并且如果start小于end则添加一个-

这是我的代码:

for a, b in zip(df["qstart"],df["qend"]):
    if a > b:
        df['e'] = '+'
    elif a < b:
        df.['e'] = '-'

但是即使-中的值高于qstart

,我也只能进入qend所表示的列链中。

谢谢您的帮助

df:

qseqid  sseqid  pident  length  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore
scaffold_1  test    25.5    337 166 9   2   20  27  310 1.0e-16 94.0
scaffold_1  tes2    27.0    278 163 9   500 20  222 487 1.e-16  94.0
scaffold_1  tes4    35.5    166 93  2   3   10  63  227 2.e-15  89.7

我应该得到的休息:

qseqid  sseqid  pident  length  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore    strand
scaffold_1  test    25.5    337 166 9   2   20  27  310 1.0e-16 94.0    +
scaffold_1  tes2    27.0    278 163 9   500 20  222 487 1.e-16  94.0    -
scaffold_1  tes4    35.5    166 93  2   3   10  63  227 2.e-15  89.7    +

其他部分:

0

我有一个df,例如:

qseqid  sseqid  pident  length  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore
scaffold_1  test    25.5    337 166 9   2   20  27  310 1.0e-16 94.0
scaffold_1  tes2    27.0    278 163 9   500 20  222 487 1.e-16  94.0
scaffold_1  tes4    35.5    166 93  2   3   10  63  227 2.e-15  89.7

,如果df.qstart,我想更改ds.qenddf.qstart>df.qstart中的值

在这里是:

qseqid  sseqid  pident  length  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore
    scaffold_1  test    25.5    337 166 9   2   20  27  310 1.0e-16 94.0
    scaffold_1  tes2    27.0    278 163 9   20 500  222 487 1.e-16  94.0
    scaffold_1  tes4    35.5    166 93  2   3   10  63  227 2.e-15  89.7 

您可能会发现500取代了20,谢谢您的帮助

1 个答案:

答案 0 :(得分:1)

您可以使用np.where

df['e']=np.where(df["qstart"]>df["qend"],'+','-')