首页 > 解决方案 > 单独列的连续相同值布尔值的 A 列值的总和

问题描述

我有一个数据框:

df = pd.DataFrame(np.random.rand(15, 3), columns=list('ACD'))
df['C > D'] = df['C'] > df['D']

    A            C          D           C > D
0   0.031469    0.104515    0.123596    False
1   0.549081    0.065270    0.036311    True
2   0.426498    0.674991    0.601090    True
3   0.759211    0.680903    0.601398    True
4   0.459308    0.801639    0.572331    True
5   0.691453    0.559478    0.959135    False
6   0.181677    0.091478    0.192358    False
7   0.186661    0.981368    0.721595    True
8   0.473044    0.603869    0.683941    False
9   0.015301    0.173707    0.304635    False
10  0.645700    0.300221    0.944034    False
11  0.087918    0.020047    0.720342    False
12  0.012420    0.017378    0.050286    False
13  0.496994    0.631002    0.618231    True
14  0.133083    0.454531    0.451067    True

我正在尝试做的事情:

我正在尝试创建一个新列,它将取与Column A列 C>D 的连续相同值组相关的总和。

所以C>D的第一个值是False,后面没有任何False值,所以这个连续的同值组由一个项目组成,返回值是A列中落入该组的所有元素的总和(索引0),0.031469

下一组由于值的变化(从 False 到 True)由索引 1-4(包括)组成,其中包含所有 True 值。因此,该组的值将是以下各项的总和:

1   0.549081    
2   0.426498    
3   0.759211    
4   0.459308

这就像2.201(在我的头顶)。

标签: pythonpandasdataframesum

解决方案


cumsum()可以用非零差异来识别连续的相同值。所以你可以这样做:

# print groups to see details
groups = df['C > D'].diff().ne(0).cumsum()

# groupby
df.groupby(gropus)['A'].sum()

输出:

C > D
1    0.031469
2    2.194098
3    0.873130
4    0.186661
5    1.234383
6    0.630077
Name: A, dtype: float64

推荐阅读