2017-05-23 3 views
1

Ich habe eine df:Pandas mehrere Zustand und fügen Sie mehrere Spalte

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 

Frage:

Ich mag würde mehrere Operationen basierend auf ‚Start‘ und ‚Ende‘ Spalte

zuerst durchzuführen Erstellen Sie zwei zusätzliche Spalten mit dem Namen

Wie kann ich dies mit Pandas tun, fand ich den Link Belo w aber nicht sicher, wie man es ausführt. Wenn jemand einen Pseudo-Code bereitstellen kann, baut er darauf auf. adding multiple columns to pandas simultaneously

Antwort

1

Sie können es tun np.where mit 2 Zeilen, aber lesbar

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 
+0

Oh ich sehe, muss ich als np nennen numpy. Entschuldigung, ich habe meinen Code bearbeitet, aber ich denke deine Antwort wäre immer noch die gleiche? – novicebioinforesearcher

+0

arbeiten Sie auf Jupyter ich bekomme diese 'TypeError: nicht unterstützte Operandentyp (en) für -: 'str' und 'int'' – novicebioinforesearcher

+0

Also wenn ich es auf jupyter Notebook ausführen Es funktioniert gut, aber am Terminal bekomme ich den obigen Fehler . – novicebioinforesearcher

1

Wenn Sie es in Pandas tun wollen, ist df.loc ein guter Kandidat:

df['newstart'] = df['start'] - 3 
df['newend'] = df['start'] + 26 
subset = df['strand'] == '+' 
df.loc[subset,'newstart']=df.loc[subset,'end']-27 
df.loc[subset,'newend']=df.loc[subset,'end']+2 

Ich denke, es ist eine gute Idee, weiterhin Pandas zu verwenden, um Ihre Daten zu verarbeiten: es wird Ihren Code konsistent halten, und es gibt wahrscheinlich eine bessere, kürzere Möglichkeit, den obigen Code zu schreiben.

df.loc ist eine sehr nützliche Funktion zum Suchen und Verarbeiten von Daten, versuchen Sie, damit umzugehen, da es ein großartiges Werkzeug ist.

Genießen

+0

funktioniert nicht versucht es – novicebioinforesearcher

+0

Mmm, ich muss etwas vergessen haben, wenn Sie den Code einfügen. Ich habe meine Antwort mit dem Arbeitscode bearbeitet (tessed on python 3.5). –

Verwandte Themen