我的数据如下所示(ch
= channel ,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
请注意,实际上,时间列是一个具有 12 位左右有效数字的 float
,对于 1 次测量的所有检测器来说仍然是常量,但它的值是不可预测的,也不在序列中。
我需要创建的是一个如下所示的数据框:
c time mean_counts_over_detectors
1 0 xxx
2 0 yyy
1 1 zzz
1 1 www
即,我想每次分别对 1 个 channel 的检测器的所有计数应用 np.mean
。我可以编写笨拙的循环,但我觉得 pandas 必须为此内置一些东西。我仍然是 pandas 的初学者,尤其是 MultiIndex 有很多概念,我不确定我应该在文档中寻找什么。
标题包含“条件”,因为我认为也许我想要一个 channel 的所有检测器的平均时间相同的计数的事实可以表示为切片条件。
最佳答案
与@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
小心 float 和 groupby(无论是否独立于 MultiIndex),由于与 float 相关的数值表示/精度限制,组可能会有所不同。
关于python - 如何在 pandas.multiindex 级别应用条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13119515/