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

标签 python pandas dataframe multi-index

我的数据如下所示(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/

相关文章:

python - 如何更改 matplotlib 在绘制时间戳对象时使用的步长?

python - 从 Pandas Dataframe 写入格式化的二进制文件

python - 如何将包含 null 和非 null 的行分成两个不同的 DataFrame?

r - 熔化数据框并将列中的值粘贴在一起

python - 如何有效地复制 pandas 行,仅更改一列?

python - 如何检查矩阵中的行是否有重复项?

python - 在 python 中解包序列

python - 使用其他行中的值将函数应用于 pandas 数据框行

python - Tastypie 登录返回 HttpResonse 500

python - Pandas 0.10.1 到 0.11.0 .ix 方法