2016-09-18 125 views
2

這裏是我的數據幀計數值GROUPBY

data = {'Date' : ['08/20/10','08/20/10','08/20/10','08/21/10','08/22/10','08/24/10','08/25/10','08/26/10'] , 'Receipt' : [10001,10001,10002,10002,10003,10004,10004,10004], 
    'Product' : ['xx1','xx2','yy1','fff4','gggg4','fsf4','gggh5','hhhg6']} 

dfTest = pd.DataFrame(data) 
dfTest 

這將產生:

Date Product Receipt 
0 08/20/10 xx1 10001 
1 08/20/10 xx2 10001 
2 08/20/10 yy1 10002 
3 08/21/10 fff4 10002 
4 08/22/10 gggg4 10003 
5 08/24/10 fsf4 10004 
6 08/25/10 gggh5 10004 
7 08/26/10 hhhg6 10004 

我想每天唯一的進貨數。

繼承人我所做的:

dfTest.groupby(['Date','Receipt']).count() 

        Product 
Date Receipt 
08/20/10 10001 2 
      10002 1 
08/21/10 10002 1 
08/22/10 10003 1 
08/24/10 10004 1 
08/25/10 10004 1 
08/26/10 10004 1 

我很困惑與這種指數表現的,所以我重新設置。

df2 = dfTest.groupby(['Date','Receipt']).count().reset_index() 
df2 

    Date Receipt Product 
0 08/20/10 10001 2 
1 08/20/10 10002 1 
2 08/21/10 10002 1 
3 08/22/10 10003 1 
4 08/24/10 10004 1 
5 08/25/10 10004 1 
6 08/26/10 10004 1 

現在我按日期則顯示只有發行張數進行分組它。

df2.groupby([ '日期']) '收據'。COUNT()

Date 
08/20/10 2 
08/21/10 1 
08/22/10 1 
08/24/10 1 
08/25/10 1 
08/26/10 1 
Name: Receipt, dtype: int64 

還有我每天唯一的進貨數。我正在想我提出解決方案的方式有點粗糙。有沒有更好的方式去做我打算做的事情?

回答

2

試試這個:

In [191]: dfTest.groupby('Date').Receipt.nunique() 
Out[191]: 
Date 
08/20/10 2 
08/21/10 1 
08/22/10 1 
08/24/10 1 
08/25/10 1 
08/26/10 1 
Name: Receipt, dtype: int64 

或這,這取決於你的目標:

In [188]: dfTest.groupby(['Date','Receipt']).Product.nunique().reset_index(level=1, drop=True) 
Out[188]: 
Date 
08/20/10 2 
08/20/10 1 
08/21/10 1 
08/22/10 1 
08/24/10 1 
08/25/10 1 
08/26/10 1 
Name: Product, dtype: int64