2017-08-29 52 views
0

我有以下的數據幀DF(小提取物給出):如何分組數據並創建分檔?

time_diff avg_qty_per_day 
1.450000 1.0 
1.483333 1.0 
1.500000 1.0 
2.516667 1.0 
2.533333 1.0 
2.533333 1.5 
3.633333 1.8 
3.644567 5.0 

我怎樣才能組成倉,以得到以下結果?:

1 3 
2 3.5 
3 6.8 

的大小bin應該是可配置的。

+2

這不是很清楚你想怎麼組的元素?例如,你有什麼類別? – rammelmueller

+0

@rammelmuller:在我的示例中,bin大小爲1,根據'time_diff'的值創建箱。結果中的第二列是相應倉的「avg_qty_per_day」的總和。但我希望箱子的大小很靈活,以便我可以輕鬆地將其更改爲2或3或其他值,而不是默認值1. – Dinosaurius

+0

箱子大小2.8如何? –

回答

2

我想你需要cut

bins = [-np.inf, 2, 3, np.inf] 
labels=[1,2,3] 
df = df['avg_qty_per_day'].groupby(pd.cut(df['time_diff'], bins=bins, labels=labels)).sum() 
print (df) 
time_diff 
1 3.0 
2 3.5 
3 6.8 
Name: avg_qty_per_day, dtype: float64 

如果要檢查標籤:

bins = [-np.inf, 2, 3, np.inf] 
labels=[1,2,3] 
df['label'] = pd.cut(df['time_diff'], bins=bins, labels=labels) 
print (df) 
    time_diff avg_qty_per_day label 
0 1.450000    1.0  1 
1 1.483333    1.0  1 
2 1.500000    1.0  1 
3 2.516667    1.0  2 
4 2.533333    1.0  2 
5 2.533333    1.5  2 
6 3.633333    1.8  3 
7 3.644567    5.0  3 
+0

因此,我應該手動定義'labels'和'bin'?如果我有幾千個垃圾箱呢? – Dinosaurius

+0

是的,它是python列表。 – jezrael

+0

哦,我可以用這個:'bins = np.arange(df ['time_diff']。min(),df ['time_diff']。max()+ 2,2)' – Dinosaurius