2017-11-19 6 views
0

で最後の重複行をカウント:パイソン/パンダは - 私はこのようなデータフレームを持って連続

 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 

そして私はproduct_id列によってグループのデータフレームに持っており、最後の重複行をカウントします。たとえば、最後の行と重複していても70063行はカウントされません。だから、出力はこのようになります。

product_id   count 
    2964562   3.000 
    2964733   2.000 

答えて

0

用途:

#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 

詳細:

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

これは、すべての重複行をカウントしますが、私は最後の重複カウントする必要があります行 –

+0

いいえ、 'a 'ヘルパーによってカウントされるので、シリーズ - もしそうなら、最初値は '3'ではなく' 4'になります – jezrael

+0

このコードを実行すると、 '2964562'の' product_id'の隣に '4'が表示されます –

関連する問題