如果满足条件,则替换行中的单元格

时间:2016-06-29 13:26:22

标签: python pandas dataframe

是否可以使用Less,Middle Greater列。如果大于0则用1替换ROW。那么顶行会变成?

                  Conc      Less    Middle   Greater
Date                                                
2005-03-02 00:00  10.3  0.000000  1         1

这是原作

                  Conc      Less    Middle   Greater
Date                                                
2005-03-02 00:00  10.3  0.000000  0.083333  0.916667

2005-03-02 01:00  14.1  0.000000  0.750000  0.250000

2005-03-02 02:00   7.0  0.000000  0.833333  0.166667

2005-03-02 03:00   7.0  0.000000  1.000000  0.000000

2005-03-02 04:00   7.2  0.000000  1.000000  0.000000

2005-03-02 06:00   6.6  0.333333  0.666667  0.000000

2005-03-02 07:00   6.6  0.416667  0.583333  0.000000

我试过了:

df.loc[df['Less']>0:]=1
df.loc[df['Less']==0:]=0

但是显示为红色并表示False True(在正确的位置)和: dtype:bool,无,无)

我也尝试过:像:

一样循环
for line in df['Less']:
    if df['Less'] >0:
        df['Less']=1
  

ValueError:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

2 个答案:

答案 0 :(得分:1)

您可以将loc与布尔条件一起使用:

In [250]:
df.loc[df['Less'] > 0, 'Less'] = 1
df

Out[250]:
                     Conc  Less    Middle   Greater
Date                                               
2005-03-02 00:00:00  10.3   0.0  0.083333  0.916667
2005-03-02 01:00:00  14.1   0.0  0.750000  0.250000
2005-03-02 02:00:00   7.0   0.0  0.833333  0.166667
2005-03-02 03:00:00   7.0   0.0  1.000000  0.000000
2005-03-02 04:00:00   7.2   0.0  1.000000  0.000000
2005-03-02 06:00:00   6.6   1.0  0.666667  0.000000
2005-03-02 07:00:00   6.6   1.0  0.583333  0.000000

df.loc[df['Less']>0:]语法无效,您想使用逗号并传递感兴趣的列名列表

您的for循环版本:

for line in df['Less']:
    if df['Less'] >0:
        df['Less']=1

无效,因为if无法理解如何解释布尔值数组因此错误,如果您执行了if (df['Less'] >0).all()if (df['Less'] >0).any()那么它会很高兴但它会无论如何你都没有意义,因为你要逐行迭代,然后测试浪费的整个df。

答案 1 :(得分:0)

一次完成所有操作:

columns = ['Less', 'Middle', 'Greater']
df[columns] = np.where(df[columns] >0, 1 ,0)

或者单独进行(注意用于选择列的双括号):

df[['Less']] = np.where(df[['Less']] >0, 1 ,0)
df[['Middle']] = np.where(df[['Middle']] >0, 1 ,0)
df[['Greater']] = np.where(df[['Greater']] >0, 1 ,0)