Python 对行(但不是所有行)求和,为其他行指定默认值

Python 对行(但不是所有行)求和,为其他行指定默认值,python,pandas,Python,Pandas,假设我有以下dataframe(但请记住,这可能有100多行和100多列): 我只想对满足条件的某些行的值求和,在本例中,对于流而言,这些行具有2。对于其他行,我希望它们获得默认值,例如0 这就是我所尝试的: cols = [col for col in dataFrame.columns if col != 'stream'] dataFrame.loc[dataFrame['stream'] == 2, cols].sum(axis=1) 但它没有得到我想要的结果。我的代码出了什么问题?

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

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

这就是我所尝试的:

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

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

我认为您非常接近,您只需添加新列
sum
,然后使用
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
,最后您可以通过以下方式将
float
强制转换为
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
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