2016-04-29 46 views
1

說我有以下數據框(但要記住,這可能有100+的行和列):求和行(但不是全部),給其他行默認值

table

我只想對滿足條件的某些行的值進行求和,在這種情況下,對於,,對於。對於其他行,我希望它們獲得默認值,例如。

這是我的嘗試:

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

但是它沒有得到我想要的結果。我的代碼有什麼問題?

回答

1

我覺得你很接近,你只需要添加新列sum然後fillna0

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,最後你可以通過astypefloatint

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 
+0

再次感謝男人,它的工作,很棒的工作!感謝關於轉換的信息,稍後可能需要。 – Stanko

+1

很高興能爲您提供幫助!美好的一天! – jezrael

相關問題