python - pandas 多个条件并添加多列

标签 python pandas

我有一个 df:

import pandas as pd
df.head(20)
                          id  ch      start        end strand
0   10:100026072-100029645(+)  10  100026072  100029645      +
1   10:110931880-110932381(+)  10  110931880  110932381      +
2   10:110932431-110933096(+)  10  110932431  110933096      +
3   10:111435307-111439556(-)  10  111435307  111439556      -
4   10:115954439-115964883(-)  10  115954439  115964883      -
5   10:115986231-116018509(-)  10  115986231  116018509      -
6   10:116500106-116500762(-)  10  116500106  116500762      -
7   10:116654355-116657389(-)  10  116654355  116657389      -
8   10:117146840-117147002(-)  10  117146840  117147002      -
9   10:126533798-126533971(-)  10  126533798  126533971      -
10  10:127687390-127688824(+)  10  127687390  127688824      +
11    10:19614164-19624369(-)  10   19614164   19624369      -
12    10:42537888-42543687(+)  10   42537888   42543687      +
13    10:61927486-61931038(-)  10   61927486   61931038      -
14    10:70699779-70700206(-)  10   70699779   70700206      -
15    10:76532243-76532565(-)  10   76532243   76532565      -
16    10:79336852-79337034(-)  10   79336852   79337034      -
17    10:79342487-79343173(+)  10   79342487   79343173      +
18    10:79373277-79373447(-)  10   79373277   79373447      -
19    10:82322045-82337358(+)  10   82322045   82337358      +

df.shape
(501, 5)

>>>df.dtypes
 id        object
 ch        object
 start     object
 end       object
 strand    object
 dtype: object

问题:

我想根据“开始”和“结束”列执行多项操作

首先创建两个名为

的附加列
newstart newend  

desiredoperation: if strand == '+':
                     df['newstart'] = end - int(27)
                     df['newend'] = end + 2
                  elif: 
                      strand == '-'
                      df['newstart'] = start - int(3)
                      df['newend'] = start + 26

我如何使用 pandas 执行此操作,我找到了下面的链接,但不确定如何执行它。如果有人可以提供伪代码,我们将在此基础上进行构建。 adding multiple columns to pandas simultaneously

最佳答案

你可以使用 np.where 来做到这一点,2行但可读

df['newstart'] = np.where(df.strand == '+', df.end-int(27), df.start-int(3))
df['newend'] = np.where(df.strand == '+', df.end+int(2), df.start+int(26))

    id                         ch   start       end      strand newstart    newend
0   10:100026072-100029645(+)   10  100026072   100029645   +   100029618   100029647
1   10:110931880-110932381(+)   10  110931880   110932381   +   110932354   110932383
2   10:110932431-110933096(+)   10  110932431   110933096   +   110933069   110933098
3   10:111435307-111439556(-)   10  111435307   111439556   -   111435304   111435333
4   10:115954439-115964883(-)   10  115954439   115964883   -   115954436   115954465
5   10:115986231-116018509(-)   10  115986231   116018509   -   115986228   115986257
6   10:116500106-116500762(-)   10  116500106   116500762   -   116500103   116500132
7   10:116654355-116657389(-)   10  116654355   116657389   -   116654352   116654381
8   10:117146840-117147002(-)   10  117146840   117147002   -   117146837   117146866
9   10:126533798-126533971(-)   10  126533798   126533971   -   126533795   126533824

关于python - pandas 多个条件并添加多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44123854/

相关文章:

Python 如何编辑/更新 GitHub 要点?

python - Django 最佳实践 - 何时使用 View 、何时使用标签

python - 当向 uuid.UUID() 提供无效参数时会发生什么?

python - 从 2D 列表中删除重复元素(不是列表),Python

延迟日期时间索引列的 Pythonic 方法

python - 在临时文件夹上设置 SFTP 服务器?

python - 实现 Trie 以支持 Python 中的自动完成

python - RuntimeWarning 的 Pandas 错误问题

python - 遍历数据框的行并按组重新分配最小值

python - Pandas 按具有重复日期时间的组重新采样