2017-11-19 1 views
0

I Datenrahmen wie dieses:Python/Pandas - zählen letzte doppelte Zeilen nacheinander

 product_id   dt products_qty 
70063  2964562 2017-11-14   0.000 
72719  2964562 2017-11-15   2.000 
401533  2964562 2017-11-16   0.000 
413201  2964562 2017-11-17   0.000 
424227  2964562 2017-11-18   0.000 
450345  2964733 2017-11-14   4.000 
470446  2964733 2017-11-17   0.000 
473233  2964733 2017-11-18   0.000 

Und ich habe zu einer Gruppe von Datenrahmen product_id Spalte und zählen letzte doppelte Zeilen. Zum Beispiel zählen wir die Zeile 70063 nicht, auch wenn sie mit den letzten Zeilen dupliziert wird. So sollte die Ausgabe sein:

product_id   count 
    2964562   3.000 
    2964733   2.000 

Antwort

0

Verwendung:

#create unique consecutives values by products_qty 
a = df['products_qty'].ne(df['products_qty'].shift()).cumsum() 
#get lens of each group 
b = df.groupby([df['product_id'], a]).size() 
#filter out unique groups and get last row 
df = b[b > 1].groupby(level=0).last().reset_index(name='count') 
print (df) 
    product_id count 
0  2964562  3 
1  2964733  2 

Detail:

print (a) 
70063  1 
72719  2 
401533 3 
413201 3 
424227 3 
450345 4 
470446 5 
473233 5 
Name: products_qty, dtype: int32 

print (b) 
product_id products_qty 
2964562  1    1 
      2    1 
      3    3 
2964733  4    1 
      5    2 
dtype: int64 
+0

Es zählt alle duplizierten Zeilen, aber ich brauche nur letzte dupliziert zählen Zeilen –

+0

Nein, weil es von 'a' Helferserie zählt - wenn ja, zuerst Wert wird '4' nicht' 3' sein – jezrael

+0

Wenn ich diesen Code ausführen, zeigt es '4' neben dem' 2964562' 'product_id' –