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