如何在 pandas.multiindex 级别应用条件?

2024-01-05

我的数据看起来像这样(ch= 频道,det= 探测器):

ch det time counts 
1   1    0    123
    2    0    121
    3    0    125 
2   1    0    212
    2    0    210
    3    0    210 
1   1    1    124
    2    1    125
    3    1    123 
2   1    1    210
    2    1    209
    3    1    213

请注意,实际上,时间列是float具有 12 个左右的有效数字,对于 1 次测量的所有探测器而言仍然恒定,但其值不可预测,也不按顺序排列。

我需要创建一个如下所示的数据框:

c  time  mean_counts_over_detectors
1   0       xxx
2   0       yyy
1   1       zzz
1   1       www

即,我想申请np.mean分别对1个通道的探测器各时刻的所有计数进行统计。我可以编写笨拙的循环,但我觉得 pandas 必须为此内置一些东西。我仍然是 pandas 的初学者,特别是 MultiIndex 有很多概念,我不确定我应该在文档中寻找什么。

标题包含“条件”,因为我认为我想要一个通道的所有检测器的时间相同的计数的平均值这一事实可以表示为切片条件。


与 @meteore 相同,但具有 MultiIndex。

In [55]: df
Out[55]:
             counts
ch det time
1  1   0        123
   2   0        121
   3   0        125
2  1   0        212
   2   0        210
   3   0        210
1  1   1        124
   2   1        125
   3   1        123
2  1   1        210
   2   1        209
   3   1        213

In [56]: df.index
Out[56]:
MultiIndex
[(1L, 1L, 0L) (1L, 2L, 0L) (1L, 3L, 0L) (2L, 1L, 0L) (2L, 2L, 0L)
 (2L, 3L, 0L) (1L, 1L, 1L) (1L, 2L, 1L) (1L, 3L, 1L) (2L, 1L, 1L)
 (2L, 2L, 1L) (2L, 3L, 1L)]

In [57]: df.index.names
Out[57]: ['ch', 'det', 'time']

In [58]: df.groupby(level=['ch', 'time']).mean()
Out[58]:
             counts
ch time
1  0     123.000000
   1     124.000000
2  0     210.666667
   1     210.666667

请注意浮点数和分组(这是否独立于 MultiIndex),由于与浮点数相关的数字表示/精度限制,组可能会有所不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 pandas.multiindex 级别应用条件? 的相关文章

随机推荐