对行(但不是全部)求和,给其他行默认值

时间:2016-04-29 07:08:53

标签: python pandas

假设我有以下数据框(但请记住,这可能有100多行和列):

table

我只想对满足条件的某些行的值求和,在这种情况下,对于具有 2 的行。对于其他行,我希望它们获得默认值,例如 0

这就是我的尝试:

cols = [col for col in dataFrame.columns if col != 'stream']
dataFrame.loc[dataFrame['stream'] == 2, cols].sum(axis=1)

但它没有得到我想要的结果。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

我认为您非常接近,您只需添加新列sum,然后fillna添加0

cols = [col for col in df1.columns if col != 'stream']
print cols
['feat', 'another_feat']

df1['sum'] = df1.loc[df1['stream'] == 2, cols ].sum(axis=1)
df1['sum'] = df1['sum'].fillna(0)
print df1
   stream  feat  another_feat   sum
a       1     8             4   0.0
b       2     5             5  10.0
c       2     7             7  14.0
d       3     3             2   0.0

如果所有值均为int,则最后您可以astypefloat投射到int

df1['sum'] = df1['sum'].fillna(0).astype(int)
print df1
   stream  feat  another_feat  sum
a       1     8             4    0
b       2     5             5   10
c       2     7             7   14
d       3     3             2    0

numpy.where的另一个解决方案:

df1['sum'] = np.where(df1['stream'] == 2, df1[cols].sum(axis=1), 0)
print df1
   stream  feat  another_feat  sum
a       1     8             4    0
b       2     5             5   10
c       2     7             7   14
d       3     3             2    0