2016-06-07 85 views
2

我有一個關於python熊貓裝箱的小問題。不規則的裝倉p2 python熊貓

我有一個數據幀類似如下:

df = 
variable test_score 
-1   52.0 
1   53.0 
4   54.0 
6   64.0 
6   64.0 
-6   64.0 
5   71.0 
10   73.0 
-15   75.0 
4   77.0 
....... etc, etc.... 

我想箱相對於所述柱/變量「可變的」,以使得相同的行數「X」(說100 )出現在每個「變量」箱中。

然後,我想分散繪製每個變量bin((variable_bin_min + variable_bin_max)/ 2)的中心值與該變量bin的測試分數的平均值。

我看不到一個簡單的方法來做到這一點,將不勝感激任何指導!

+0

我對這個問題感到困惑。爲了'bin',你需要一個變量或者列來排序(可能有幾個)。你想對你的列「變量」進行「分箱」嗎?你能確定數據將與binning合併成相同數量的行嗎?還是你打開靈活的?你想計算bin_min和bin_max作爲「test_score」或「variable」列的最小值和最大值嗎? – piRSquared

+0

你好!對任何混淆的道歉......我確實希望看到變量/列「變量」。垃圾箱的尺寸不規則,以確保每個垃圾箱中有相同數量的行(我在邊緣處很靈活)。 bin_min和bin_max值是每個「變量」bin的邊緣 –

+0

我確信一旦執行初始分箱,繪圖很簡單... –

回答

1

這應該完成它。我製作了這些數據,所以它看起來不像你的。

import pandas as pd 
import numpy as np 

np.random.seed([3,1415]) 
df = pd.DataFrame(dict(variable=np.random.choice(range(20), (1000,)), 
         test_score=np.random.rand(1000,).round(2) * 100)) 

df_ = df.groupby(pd.qcut(df.variable, len(df)/100)).agg([np.min, np.max, np.mean]) 

pd.concat([df_.variable.apply(lambda x: x.loc[['amin', 'amax']].mean(), axis=1), 
      df_.test_score['mean']], 
      axis=1, 
      keys=['bin_center', 'mean_score']).plot.scatter('bin_center', 'mean_score') 

enter image description here

+0

非常感謝您接受該做的時候了!這將工作:) –

1

對於包含5個項目,然後pd.cut(),以進一步切片數據的垃圾桶:

LL  = df['test_score'].tolist() 
bins = LL[::5]