如何在有条件的情况下提高循环速度?

时间:2019-09-09 19:57:33

标签: python pandas

我想计算每行有多少列的值大于零。因此,如果三列中的两列具有必需的值,则得分为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

2 个答案:

答案 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)