python - 根据组聚合值在 MultiIndex Dataframe 上设置值

标签 python pandas dataframe multi-index

我有一个 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。

在这种情况下,由于 C0E 总数为​​ 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

我能够使用下面的代码做到这一点,但它不可扩展,我相信一定有更好的方法来做到这一点:

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

最佳答案

我想你可以使用 transform用于创建 bool 掩码,然后是 boolean indexing喜欢:

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

mask = (simple.groupby(level=['S','C']).transform(sum)< 7)['E']
print mask
S  C   R 
0  C0  R0     True
       R1     True
       R2     True
       R3     True
   C1  R0    False
       R1    False
       R2    False
       R3    False
   C2  R0    False
       R1    False
       R2    False
       R3    False
Name: E, dtype: bool
simple.loc[mask, 'E'] = 0
print simple
         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 - 根据组聚合值在 MultiIndex Dataframe 上设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35678458/

相关文章:

python - 访问 twisted.web.client.Agent 的套接字选项

python - Pandas:迭代并插入具有组内条件的列复杂问题

Pandas :计算每个类的列百分比

python - 在 Python 中矢量化 Haversine 距离计算

pandas - 替换列名称中的部分字符串

Python-当另一列中的数字大于2之前的数字时,将列中的x值保存到列表中

python - 如何使用 scikit-learn 中的信息增益度量选择 Dataframe 中的最佳特征

python - 如何在 PyTorch 中对子集使用不同的数据增强

python - 从 psycopg2 connection.commit() 获取受影响的行数

python - 我需要在 Python 中安全地存储用户名和密码,我有哪些选择?