我想计算每行有多少列的值大于零。因此,如果三列中的两列具有必需的值,则得分为2。
我可以使用for循环来构建它,但是它似乎很慢,因此我正在寻找更快的替代方法。我该怎么办?
df = pd.DataFrame({'intro': [1, 2, 3], 'quote': [0, 1, 0],'sample': [0, 1, 4]},
columns=['intro', 'quote','sample'])
df['score']=0
cols=['intro', 'quote', 'sample']
for i in range(len(df)):
print(i)
for col in cols:
if df.iloc[i][col] >= 1:
df['score'][i]= df['score'][i]+1
df_expected = pd.DataFrame({'intro': [1, 2, 3], 'quote': [0, 1, 0],'sample': [0, 1, 4],'score': [1, 3, 2]},
columns=['intro', 'quote','sample','score'])
df_expected
答案 0 :(得分:3)
这可以解决问题:
df['score']=(df>0).sum(axis=1)
答案 1 :(得分:2)
您可以像这样创建值大于0的True / False框架:
df > 0
您不能使用
在每一列中设置True值。(df > 0).sum(axis)
并创建一个像这样的列:
df['score'] = (df > 0).sum(axis=1)