Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果条件满足,则更换行中的单元格_Python_Pandas_Dataframe - Fatal编程技术网

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

Python 如果条件满足,则更换行中的单元格,python,pandas,dataframe,Python,Pandas,Dataframe,是否有一种方法可用于较小、中间较大的列。如果大于0,则用1替换该行。那么最上面一排会变成什么 Conc Less Middle Greater Date 2005-03-02 00:00 10.3 0.000000 1 1 这是原件 Conc Less Middle

是否有一种方法可用于较小、中间较大的列。如果大于0,则用1替换该行。那么最上面一排会变成什么

                  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,并且: 数据类型:bool,无,无)

我也试过:像这样循环:

for line in df['Less']:
    if df['Less'] >0:
        df['Less']=1
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()


您可以将
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,这是一种浪费。

一次完成所有操作:

columns = ['Less', 'Middle', 'Greater']
df[columns] = np.where(df[columns] >0, 1 ,0)
或者单独进行(请注意,选择列时使用双括号):


干杯,这似乎起了作用啊好吧,我试过了With.any(),但这假设整个df都是真的,即使只有一个是.np是numpy import btw
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)