【发布时间】:2016-02-28 03:47:19
【问题描述】:
我有一个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
本质上是在C 索引处计算E 的数量。我想做的是根据聚合结果将原始数据帧中的E 值设置为任意值。例如,如果聚合 >= 某个值,则将组 (C) 的所有 E 设置为 0。
在这种情况下,由于 C0 的 E 总数为 6,因此我想将任何 C* 的 E 设置为零,其中总和为 >=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
我可以使用下面的代码做到这一点,但它不可扩展,我相信一定有更好的方法来做到这一点:
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
【问题讨论】:
标签: python pandas dataframe multi-index