2016-04-19 4 views
0

Ich versuche, den time Wert an plotList anfügen, wo immer dup Spalte Wert ist False.Anhängen an Liste nach Pandas if else Anweisung

Die DF =

lat    time  trip_id  diff shifted Segment dup 
-7.12040 2015-12-24 02:03:10 18060.0 0.00003 0.00000  1 False 
-7.12043 2015-12-24 02:03:12 18060.0 0.00000 0.00003  2 False 
-7.12043 2015-12-24 02:03:14 18060.0 0.00003 0.00003  2 True 
-7.12046 2015-12-24 02:03:16 18060.0 0.00003 0.00003  2 True 
-7.12049 2015-12-24 02:03:19 18060.0 0.00003 0.00000  3 False 
-7.12052 2015-12-24 02:03:22 18060.0 0.00000 -0.00473  4 False 

Der Kodex =

plotList=[] 
def pullLine(row): 
    if row['dup'] == False: 
     plotList.append(row['time']) 
pullLine(df) 

ich gedacht hatte dies funktionieren könnte, aber ich den Fehler, dass ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

Kann jemand a) erklären, was los ist Hier und b) Was kann ich tun, um zu vermeiden? Ich verstehe nicht, wie fragen, ob etwas False ist, kann mehrdeutig sein.

Vielen Dank.

+0

was 'row'? Können Sie ein komplettes Beispiel erstellen, das Ihre Daten generiert und die Funktion 'pullLine' anwendet? –

+0

'df ['time'] [~ df ['dup']]' sollte funktionieren? Alternativ müssen Sie apply verwenden: 'df.apply (pullLine, axis = 1)' funktioniert wie erwartet mit Ihrer 'plotList'. – jeremycg

Antwort

2

Ich denke, man es auf diese Weise tun können:

plotList = df.loc[df['dup'] == False, 'time'].values 

Sie die gesamte DF als Parameter an die Funktion sind vorbei, aber es als eine Reihe behandeln ...

je nach was wollen Sie bekommen - Array oder eine Liste:

In [167]: df.loc[df['dup'] == False, 'time'].values 
Out[167]: 
array(['2015-12-24 02:03:10', '2015-12-24 02:03:12', '2015-12-24 02:03:19', 
     '2015-12-24 02:03:22'], dtype=object) 

In [168]: df.loc[df['dup'] == False, 'time'].tolist() 
Out[168]: 
['2015-12-24 02:03:10', 
'2015-12-24 02:03:12', 
'2015-12-24 02:03:19', 
'2015-12-24 02:03:22'] 
1

würde ich auf der dup Spalte filtern, dass nur die Negation mit ~ weil sie falsch sind Filterung .

>>> df[~df.dup].time 
0 2015-12-24 02:03:10 
1 2015-12-24 02:03:12 
4 2015-12-24 02:03:19 
5 2015-12-24 02:03:22 
Name: time, dtype: object 

Wenn Sie es wirklich in einem Listenformat wollen:

df[~df.dup].time.tolist() 
['2015-12-24 02:03:10', 
'2015-12-24 02:03:12', 
'2015-12-24 02:03:19', 
'2015-12-24 02:03:22']