假设我有以下数据框(但请记住,这可能有100多行和列):
我只想对满足条件的某些行的值求和,在这种情况下,对于流具有 2 的行。对于其他行,我希望它们获得默认值,例如 0 。
这就是我的尝试:
cols = [col for col in dataFrame.columns if col != 'stream']
dataFrame.loc[dataFrame['stream'] == 2, cols].sum(axis=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
,则最后您可以astype
将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
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