2017-03-03 81 views
0

以下是我的熊貓數據框的一小部分。我希望能夠爲count中的每個值分別獲得'vel_x'直方圖(​​計數,分箱)。有沒有一種快速,內置的方法來做到這一點,而不是循環計數每個值?爲多指標熊貓數據框中的每個值創建直方圖

+-------+-------+-------+-------+--------+----+--------+ 
|  |  | x_loc | y_loc | vel_x | … | vel_z | 
+-------+-------+-------+-------+--------+----+--------+ 
| count | slice |  |  |  | |  | 
| 1 | 3  |  4 |  0 |  96 | 88 |  35 | 
|  | 4  | 10 |  2 |  54 | 42 |  37 | 
|  | 5  |  9 | 32 |  8 | 70 |  34 | 
|  | 6  | 36 | 89 |  69 | 46 |  78 | 
| 2 | 5  | 17 | 41 |  48 | 45 |  71 | 
|  | 6  | 50 | 66 |  82 | 72 |  59 | 
|  | 7  | 14 | 24 |  55 | 20 |  89 | 
|  | 8  | 76 | 36 |  13 | 14 |  21 | 
| 3 | 5  | 97 | 19 |  41 | 61 |  72 | 
|  | 6  | 22 |  4 |  56 | 82 |  15 | 
|  | 7  | 17 | 57 |  30 | 63 |  88 | 
|  | 8  | 83 | 43 |  35 | 8 |  4 | 
+-------+-------+-------+-------+--------+----+--------+ 

我已經嘗試了很多方法(應用,地圖等),但我還沒有能夠得到他們任何工作。每個方法只是將映射函數應用於所有行值。

從本質上講,我想這下面映射到計數(count_value)每個值:

def create_histogram(data, count_value): 
    values, bin_edges = np.histogram(data.loc[count_value, 'vel_x']) 
    return values 

則是這樣的:

data.index.get_level_values('Count').map(create_histrogram(data)) 

而且,以供參考,這是我的方式目前可以執行我想要的功能,但效率不高,因爲我的數據幀非常大。

for count_value in data.index.get_level_values('Count').unique: 
    values, bin_edges = np.histogram(data.loc[count_value, 'vel_x']) 

返回的值可以存儲在另一個數組中。

非常感謝您的幫助!

+0

你能後的[最低,完整和可覈實(http://stackoverflow.com/幫助/ mcve)代碼你嘗試過的方法之一? –

+0

是的,對不起。我已經發布了代碼。我不覺得代碼本身在這種情況下會非常有用,因爲它顯然是錯誤的。 – AlC

回答

0

如何使用groupbylevel PARAM:

級別:整數,級別名,或這樣,默認無的序列如果軸 是一個多指標(分層),由特定電平或電平組

for count, sdf in df.groupby(level=0): 
    values, bin_edges = np.histogram(sdf.loc[count, 'vel_x']) 

UPDATE

既然你認爲mean(level=level)的工作方式是更好的,你也可以嘗試這種方式是由meansource code啓發:

df['vel_x'].groupby(level=0).aggregate(np.histogram) 
+0

謝謝@Yohanes。我也以這種方式完成了循環,但是我希望避免循環,因爲當數據幀非常大時,該循環相當緩慢。 – AlC

+0

如何在不迭代所有數據的情況下計算直方圖? –

+0

有一個熊貓函數df ['Vel_x']。mean(level = 0)可以有效地計算平均值。我想知道是否有類似的東西你可以做直方圖。 – AlC