我在python
中有一个数据框,例如:
seqnames start end name number strand
A 50 453 A 1 -
B 30 322 A 2 -
C 10 432 A 3 -
D 36 344 A 4 +
E 40 321 A 5 +
F 78 234 A 6 -
我想根据strand column
中的符号来更改开始和结束列中的de值。
因此,对于每一行,如果strand
是-
,则start+1
和end-2
如果绞线是+
,则什么也不做
在这里我应该得到:
seqnames start end name number strand
A 51 451 A 1 -
B 31 320 A 2 -
C 11 430 A 3 -
D 36 344 A 4 +
E 40 321 A 5 +
F 79 232 A 6 -
谢谢您的帮助
答案 0 :(得分:1)
使用:
df[['start','end']]=np.where(df['strand'].eq('-')[:,None],
np.column_stack((df['start']+1,df['end']-2)),
df[['start','end']].values)
print(df)
seqnames start end name number strand
0 A 51 451 A 1 -
1 B 31 320 A 2 -
2 C 11 430 A 3 -
3 D 36 344 A 4 +
4 E 40 321 A 5 +
5 F 79 232 A 6 -
答案 1 :(得分:1)
使用Series.mask
:
df['start'].mask(df['strand']=='-',df['start']+1,inplace=True)
df['end'].mask(df['strand']=='-',df['end']-2,inplace=True)
print(df)
seqnames start end name number strand
0 A 51 451 A 1 -
1 B 31 320 A 2 -
2 C 11 430 A 3 -
3 D 36 344 A 4 +
4 E 40 321 A 5 +
5 F 79 232 A 6 -
您还可以使用DataFrame.apply
+ DataFrame.where
:
df[['start','end']]=( df[['start','end']]
.apply(lambda x: pd.Series((x['start']+1,x['end']-2)).rename({0:'start',1:'end'}),axis=1)
.where(df['strand']=='-',df[['start','end']])
)
print(df)
seqnames start end name number strand
0 A 51 451 A 1 -
1 B 31 320 A 2 -
2 C 11 430 A 3 -
3 D 36 344 A 4 +
4 E 40 321 A 5 +
5 F 79 232 A 6 -
答案 2 :(得分:1)
df.loc[ df['strand'] == '-', ['start', 'end']] += [1, -2]
print (df)
seqnames start end name number strand
0 A 51 451 A 1 -
1 B 31 320 A 2 -
2 C 11 430 A 3 -
3 D 36 344 A 4 +
4 E 40 321 A 5 +
5 F 79 232 A 6 -
或使用numpy.where
来增加或减少值:
m = df['strand'] == '-'
df['start'] = df['start'] + np.where(m, 1 ,0)
df['end'] = df['end'] - np.where(m, 2, 0)
或将掩码转换为整数,第二个值仅乘以2
:
m = df['strand'] == '-'
df['start'] = df['start'] + m.astype(int)
df['end'] = df['end'] - m.astype(int) * 2
print (df)
seqnames start end name number strand
0 A 51 451 A 1 -
1 B 31 320 A 2 -
2 C 11 430 A 3 -
3 D 36 344 A 4 +
4 E 40 321 A 5 +
5 F 79 232 A 6 -
答案 3 :(得分:1)
另一个班轮可能是:
loc
使用from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from test_view_defaults import RESTView
if __name__ == '__main__':
with Configurator() as config:
config.add_route('rest', '/rest')
config.scan()
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()
进行索引。