以下是我的熊猫数据框的一小部分。我希望能够为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(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 :(得分:2)
如何将groupby与level
param一起使用:
级别:int,级别名称或此类序列,默认为否如果是轴 是一个MultiIndex(层次结构),按特定级别或级别分组
for count, sdf in df.groupby(level=0):
values, bin_edges = np.histogram(sdf.loc[count, 'vel_x'])
<强>更新强>
由于您认为mean(level=level)
的工作方式更好,您也可以尝试以mean
source code为灵感的方式:
df['vel_x'].groupby(level=0).aggregate(np.histogram)