如何对列求和以在特定行上创建第三个?

时间:2019-06-25 16:11:18

标签: python pandas

我有一个数据框:

A B C V
1 4 7 T
2 6 8 T
3 9 9 F

我想创建一个新列,将V为'T'的行加起来

所以我想要

A B C V D
1 4 7 T 12
2 6 8 T 16
3 9 9 F

有没有没有迭代的方法吗?

3 个答案:

答案 0 :(得分:2)

在求和之前对值进行掩码:

df.select_dtypes(np.number).sum(axis=1).mask(df['V'] != 'T')    
# Or,
df.select_dtypes(np.number).mask(df['V'] != 'T').sum(axis=1, skipna=False) 

0    12.0
1    16.0
2     NaN
dtype: float64

df['D'] = df.select_dtypes(np.number).sum(axis=1).mask(df['V'] != 'T')                                                                      
df                                                                                                                                        
   A  B  C  V     D
0  1  4  7  T  12.0
1  2  6  8  T  16.0
2  3  9  9  F   NaN

如果您确实想要空白,请使用

df.select_dtypes(np.number).sum(axis=1).mask(df['V'] != 'T', '')                                                                          
0    24
1    32
2      
dtype: object

哪个返回对象列(不推荐)。


或者,使用np.where

np.where(df['V'] == 'T', df.select_dtypes(np.number).sum(axis=1), np.nan)                                                                 
# array([12., 16., nan])

df['D'] = np.where(
    df['V'] == 'T', df.select_dtypes(np.number).sum(axis=1), np.nan)
df                                                                                                                                        
   A  B  C  V     D
0  1  4  7  T  12.0
1  2  6  8  T  16.0
2  3  9  9  F   0.0

答案 1 :(得分:0)

在其中使用Numpy

import numpy as np
df['D'] = np.where(df['V'] == 'T', df.select_dtypes(np.number).sum(axis=1), None)

答案 2 :(得分:0)

df['D'] = df[['A', 'B', 'C']][df['V'] == 'T'].sum(axis=1)


In [51]df:
Out[51]: 
   A  B  C  V      D
0  1  4  7  T 12.000
1  2  6  8  T 16.000
2  3  9  9  F    nan