2
我有一个MultiIndex
数据框,看起来像如下:设置值
In [1349]: print simple
E
S C R
0 C0 R0 0
R1 1
R2 2
R3 3
C1 R0 1
R1 2
R2 3
R3 4
C2 R0 2
R1 3
R2 4
R3 5
每C
列聚集E
列后,我得到如下:
In [1352]: print simple.groupby(level=['S','C']).sum()
E
S C
0 C0 6
C1 10
C2 14
基本上计数E
在C
指数的数量。我想要做的是将原始数据帧中的E
值设置为任意值,具体取决于聚合结果。例如,如果集合> =某个值,则将所有E
设置为0,组(C)
。
由于E
为C0
的总数是6,我想的E
设置为零任何C*
其中总和是> = 6,以显示类似:
In [1349]: print df
E
S C R
0 C0 R0 0
R1 0
R2 0
R3 0
C1 R0 1
R1 2
R2 3
R3 4
C2 R0 2
R1 3
R2 4
R3 5
我能够用下面的代码它做的,但它是不可伸缩的,我相信一定有更好的方法来做到这一点:我认为你可以使用transform
创建布尔面具
s3 = (simple.groupby(level=['S','C']).aggregate(sum)< 7)
s3=s3[s3['E']==True]
simple_orig = simple.copy()
for idx in s3.index:
simple.ix[idx]= 0
print simple
print simple_orig
E
S C R
0 C0 R0 0
R1 0
R2 0
R3 0
C1 R0 1
R1 2
R2 3
R3 4
C2 R0 2
R1 3
R2 4
R3 5
E
S C R
0 C0 R0 0
R1 0
R2 0
R3 0
C1 R0 1
R1 2
R2 3
R3 4
C2 R0 2
R1 3
R2 4
R3 5
这的确做到了。我对转换模式没有很好的理解,因为我相信它会返回与原始数据帧相同的索引。谢谢。 – fulatoro