Python 对行(但不是所有行)求和,为其他行指定默认值
假设我有以下dataframe(但请记住,这可能有100多行和100多列): 我只想对满足条件的某些行的值求和,在本例中,对于流而言,这些行具有2。对于其他行,我希望它们获得默认值,例如0 这就是我所尝试的: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) 但它没有得到我想要的结果。我的代码出了什么问题?
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