是否可以使用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()。
答案 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)