在Pandas中,如何对只有真布尔级数的行求和

2024-05-15 03:13:20 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题是moys的一个问题的延伸,因为我感兴趣的是如何基于布尔真值序列求和的答案。假设我有这个数据帧,我只想求真行的总和:

   id log   loc  pos_evnts  neg_evnts   As  non_As  pos_wrds  neg_wrds  As/Ac  Truth  T
0   A   c  City          8          0   48       0         0         0      1  False  1
1   A   d  City          2          6    0     180         4        10      0   True  2
2   A   e  City          0         22   87       0         0         0      1   True  2
3   A   f  City          8          0   35       0         0         0      1  False  3
4   A   g  City          8          2   42       0         0         0      1  False  3
5   A   h  City          4          4    0     115         4         2      0   True  4
6   A   i  City          2          0   32       0         0         0      1   True  4
7   B   j  Hill          3          0   24       0         0         0      1  False  5
8   B   k  City          6          8  116       0         0         2      1  False  5
9   B   l  City          2          4  200       0         0         2      1  False  5
10  C   m  City          2          0   40       0         0         0      0   True  6
11  C   n  Hill          5          0    1       0         2         0      0   True  6
12  C   o  City          5          0    7       0         0         5      1   True  6

我想对行求和得到这个答案(真正的行是求和):


    pos_evnts  neg_evnts   As  non_As  pos_wrds  neg_wrds  As/Ac  
0           8          0   48       0         0         0      1 
1           2          6    0     180         4        10      0  
2           2         28   87     180         4        10      1  
3           8          0   35       0         0         0      1  
4           8          2   42       0         0         0      1 
5           4          4    0     115         4         2      0   
6           6          4   32     115         4         2      1   
7           3          0   24       0         0         0      1  
8           6          8  116       0         0         2      1 
9           2          4  200       0         0         2      1  
10          2          0   40       0         0         0      0  
11          7          0   41       0         2         0      0  
12         12          0   48       0         2         5      1  


我试过:


df.groupby((df['T'])).cumsum()

In [4738]: df.groupby(df['T']).cumsum()                                                                                                                                                        
Out[4738]: 
    pos_evnts  neg_evnts   As  non_As  pos_wrds  neg_wrds  As/Ac  Truth
0           8          0   48       0         0         0      1  0.000
1           2          6    0     180         4        10      0  1.000
2           2         28   87     180         4        10      1  2.000
3           8          0   35       0         0         0      1  0.000
4          16          2   77       0         0         0      2  0.000
5           4          4    0     115         4         2      0  1.000
6           6          4   32     115         4         2      1  2.000
7           3          0   24       0         0         0      1  0.000
8           9          8  140       0         0         2      2  0.000
9          11         12  340       0         0         4      3  0.000
10          2          0   40       0         0         0      0  1.000
11          7          0   41       0         2         0      0  2.000
12         12          0   48       0         2         5      1  3.000

但这是错误的(事实:0.000行)。我希望它只对真正的行求和。任何帮助都将不胜感激。如何修改公式以忽略cumsum的错误行


Tags: 答案posfalsetruecitydfasac
1条回答
网友
1楼 · 发布于 2024-05-15 03:13:20

您可以只筛选只有数值列的True行,也可以为prevet cumulative sum排除T列并分配回:

cols = df.select_dtypes(np.number).columns.difference(['T'])
df.loc[df['Truth'], cols] = df.loc[df['Truth'], cols] .groupby(df['T']).cumsum() 
print (df)
   id log   loc  pos_evnts  neg_evnts   As  non_As  pos_wrds  neg_wrds  As/Ac  \
0   A   c  City          8          0   48       0         0         0      1   
1   A   d  City          2          6    0     180         4        10      0   
2   A   e  City          2         28   87     180         4        10      1   
3   A   f  City          8          0   35       0         0         0      1   
4   A   g  City          8          2   42       0         0         0      1   
5   A   h  City          4          4    0     115         4         2      0   
6   A   i  City          6          4   32     115         4         2      1   
7   B   j  Hill          3          0   24       0         0         0      1   
8   B   k  City          6          8  116       0         0         2      1   
9   B   l  City          2          4  200       0         0         2      1   
10  C   m  City          2          0   40       0         0         0      0   
11  C   n  Hill          7          0   41       0         2         0      0   
12  C   o  City         12          0   48       0         2         5      1   

    Truth  T  
0   False  1  
1    True  2  
2    True  2  
3   False  3  
4   False  3  
5    True  4  
6    True  4  
7   False  5  
8   False  5  
9   False  5  
10   True  6  
11   True  6  
12   True  6  

相关问题 更多 >

    热门问题