2017-09-12 559 views
2

因此,我有一個關於商店中客戶數據集以及該商店每天的銷售情況。如何將分組數據轉換爲熊貓分組數據

這看起來是這樣的 -

Store ID  Sales  Customers 
1   250  500 
2   276  786 
3   124  256 
5   164  925 

我如何將其轉換爲分組數據,

Sales   Customers 
0-100   0 
100-200   1181 
200-300   1286 

...我已經尋找了一段時間,發現這個從大熊貓的網站是這樣的 - http://pandas.pydata.org/pandas-docs/version/0.15.2/groupby.html

df2.groupby([ 'X'],排序=真)的.sum()

但我無法理解如何將這同樣應用於我的示例。

回答

1

使用cut的垃圾箱,然後groupby和骨料sum

df = df.groupby(pd.cut(df['Sales'], [0,100,200,300]))['Customers'].sum().fillna(0) 
print (df) 
Sales 
(0, 100]   0.0 
(100, 200] 1181.0 
(200, 300] 1286.0 
Name: Customers, dtype: float64 

也可以定義標籤:

l =['0-100','100-200','200-300'] 
b = [0,100,200,300] 
df = df.groupby(pd.cut(df['Sales'], bins=b, labels=l))['Customers'].sum() 
     .fillna(0)  
     .reset_index() 
print (df) 
    Sales Customers 
0 0-100  0.0 
1 100-200  1181.0 
2 200-300  1286.0 
+0

謝謝你,你的方法對我來說 –

1

使用pd.cut與cusom箱

In [2058]: df.groupby(pd.cut(df.Sales, [0, 100, 200, 300])).Customers.sum().fillna(0) 
Out[2058]: 
Sales 
(0, 100]   0.0 
(100, 200] 1181.0 
(200, 300] 1286.0 
Name: Customers, dtype: float64 

而且reset_index()重塑

In [2061]: (df.groupby(pd.cut(df.Sales, [0, 100, 200, 300])).Customers.sum() 
       .fillna(0).reset_index()) 
Out[2061]: 
     Sales Customers 
0 (0, 100]  0.0 
1 (100, 200]  1181.0 
2 (200, 300]  1286.0 

而且,使用labels自定義名稱

In [2062]: (df.groupby(pd.cut(df.Sales, 
       bins=[0, 100, 200, 300], 
       labels=['0-100', '100-200', '200-300'])) 
     .Customers.sum().fillna(0).reset_index()) 
Out[2062]: 
    Sales Customers 
0 0-100  0.0 
1 100-200  1181.0 
2 200-300  1286.0 
1

np.searchsorted

labels = {0: '0-100', 1: '100-200', 2: '200-300'} 
s = np.searchsorted([100, 200], df.Sales) 
df.groupby(s).Customers.sum().reindex(
    pd.Index([0, 1, 2], name='Sales'), fill_value=0 
).rename(labels).reset_index() 

    Sales Customers 
0 0-100   0 
1 100-200  1181 
2 200-300  1286 
+0

工作,我能問些什麼呢?我使用你的解決方案進行計時,看起來輸出錯誤[here](https://stackoverflow.com/a/46091980/2901002)。我不知道什麼是錯的。你能檢查它嗎? – jezrael

+0

您的功能不接受參數。因此'數據'總是一樣的。使用'stmt'參數:''{}(df)'.format(j)'。並將'data'放入您定義的每個函數的簽名中。 'dropna(data)'和'notnull(data)'和'query(data)' – piRSquared

+0

謝謝,那麼解決方案是什麼? – jezrael