Zum Beispiel habe ich folgende Daten als Liste:Python - wie das letzte Vorkommen Erfüllung einer bestimmten Bedingung aus einer Liste extrahieren
l = [['A', 'aa', '1', '300'],
['A', 'ab', '2', '30'],
['A', 'ac', '3', '60'],
['B', 'ba', '5', '50'],
['B', 'bb', '4', '10'],
['C', 'ca', '6', '50']]
Jetzt für 'A'
, 'B'
und 'C'
, ich wollte bekommen ihre letzten Vorkommen, dh:
[['A', 'ab', '3', '30'],
['B', 'bb', '4', '10'],
['C', 'ca', '6', '50']]
oder weitere, die dritte Spalte in diesen Ereignissen, nämlich:
['3', '4', '6']
Derzeit
, die Art, wie ich damit umgehen ist:
import pandas as pd
df = pd.DataFrame(l, columns=['u', 'w', 'y', 'z'])
df.set_index('u', inplace=True)
ll = []
for letter in df.index.unique():
ll.append((df.ix[letter, 'y'][-1]))
Dann %timeit
ich, es zeigt:
>> The slowest run took 27.86 times longer than the fastest.
>> This could mean that an intermediate result is being cached.
>> 1000000 loops, best of 3: 887 ns per loop
Nur frage mich, ob es eine Möglichkeit ist, dies mit weniger Zeit, als mein Code zu tun ? Vielen Dank!
Was ist die ineffiziente Art, die Sie derzeit haben? – jonrsharpe
Warum ist das letzte Vorkommen für 'A' das zweite, nicht das dritte Array? –
Verwenden Sie umgekehrt auf Ihrer Liste und dann - Mögliche Duplikate von [Was ist der beste Weg, um das erste Element aus einem iterablen zu einer Bedingung zu bekommen?] (Http://stackoverflow.com/questions/2361426/what-is-the-) best-way-to-get-the-first-item-from-iterable-matching-a-condition) –