2017-12-13 1 views
2

habe ich einen Pandas Datenrahmen:Pandas - GROUPBY - ersten Wert einer Spalte erfassen - Wrong ouput

DOCUMENT_LEDGER_ID ACTUAL_START_DATE 
     376878    2017-02-01 
     376880    2017-02-01 
     16043792   2017-01-05 
     16043792   2017-02-04 

ich gruppieren mag es auf den DOCUMENT_LEDGER_ID und will den ersten Wert von ACTUAL_START_DATE Das ist meine erwartete Ausgabe ist :

Id   ACTUAL_START_DATE 
376878   2017-02-01   
376880   2017-02-01   
16043792  2017-01-05 

ich habe folgendes versucht, aber es scheint nicht zu funktionieren:

dictToAgg = {} 
dictToAgg["ACTUAL_START_DATE"] = "first" 
cycleTimeFilteringUnique = cycleTimeFiltering.groupby('DOCUMENT_LEDGER_ID', as_index=False).first() 

Der Ausgang ich immer bin, ist dies:

 Id   ACTUAL_START_DATE 
    376878   2017-02-01   
    376880   2017-02-01   
    16043792  2017-02-04 

Ich habe ähnliche Fragen gesehen, aber ich bin nicht in der Lage, den Fehler zu verstehen, ich bin zu begehen.

+0

Für mich funktioniert es gut ... – jezrael

+0

Warum sortieren Sie Werte? Das wirft alles aus dem Gleichgewicht. –

+1

Was ist mit Alternativlösung? 'cycleTimeFilteringUnique = cycleTimeFiltering.sort_values ​​([" DOCUMENT_LEDGER_ID "," ACTUAL_START_DATE "]). drop_duplicates ('DOCUMENT_LEDGER_ID')'? – jezrael

Antwort

3

Es scheint, Sie Ausgabe von sort_values zuweisen müssen und dann Aggregat first:

cols = ["DOCUMENT_LEDGER_ID", "ACTUAL_START_DATE"] 
cycleTimeFilteringUnique = (cycleTimeFiltering.sort_values(cols) 
               .groupby('DOCUMENT_LEDGER_ID', as_index=False) 
               .first()) 

Einige alternative Lösungen:

idx = cycleTimeFiltering.groupby("DOCUMENT_LEDGER_ID")['ACTUAL_START_DATE'].idxmin() 
cycleTimeFilteringUnique = cycleTimeFiltering.loc[idx] 

cols = ["DOCUMENT_LEDGER_ID", "ACTUAL_START_DATE"] 
cycleTimeFilteringUnique = (cycleTimeFiltering.sort_values(cols) 
               .drop_duplicates('DOCUMENT_LEDGER_ID')) 

print (cycleTimeFilteringUnique) 
    DOCUMENT_LEDGER_ID ACTUAL_START_DATE 
0    376878  2017-02-01 
1    376880  2017-02-01 
2   16043792  2017-01-05 
Verwandte Themen