其他分享
首页 > 其他分享> > 如何在pandas.multiindex的级别上应用条件?

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

作者:互联网

我的数据看起来像这样(ch = channel,det = detector):

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个左右有效数字的浮点数,对于1个测量的所有检测器仍然是恒定的,但是其值不可预测,也不是序列.

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

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

即,我想分别在每个时间点对所有1个通道的探测器应用np.mean.我可以写kludgy循环,但我觉得大熊猫必须有内置的东西.我仍然是熊猫的初学者,尤其是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

小心浮动和放大器groupby(这与MultiIndex无关),由于与浮点数相关的数值表示/精度限制,组可能不同.

标签:multi-index,python,pandas,dataframe
来源: https://codeday.me/bug/20190901/1784657.html