簡體   English   中英

為多索引熊貓數據框中的每個值創建直方圖

[英]Creating a histogram for each value in multi-index pandas dataframe

以下是我的熊貓數據框的一小部分。 我希望能夠為計數中的每個值獲得單獨的“ 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(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'])

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

預先感謝您的幫助!

如何將groupbylevel參數一起使用:

level:int,級別名稱或此類的序列,默認值無如果軸是MultiIndex(分層),則按一個或多個特定級別分組

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

更新

由於您認為mean(level=level)工作方式更好,因此您也可以嘗試以下這種方法,這種方法受mean 源代碼的啟發:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM