Python 在满足条件的第一行中为dataframe赋值

Python 在满足条件的第一行中为dataframe赋值,python,pandas,dataframe,indexing,variable-assignment,Python,Pandas,Dataframe,Indexing,Variable Assignment,我有一个熊猫数据框,我想添加一列,并根据特定条件设置特定值 初始化 请参见下面的示例: import numpy as np import pandas as pd df=pd.DataFrame(np.reshape(np.arange(20),(5,4)).tolist(),columns=list('ABCD')) df['E']='' df.loc[0,'E']=1 df 在这里之前,一切都如愿。输出: A B C D E 0 0 1 2 3

我有一个熊猫数据框,我想添加一列,并根据特定条件设置特定值

初始化 请参见下面的示例:

import numpy as np
import pandas as pd

df=pd.DataFrame(np.reshape(np.arange(20),(5,4)).tolist(),columns=list('ABCD'))
df['E']=''
df.loc[0,'E']=1
df
在这里之前,一切都如愿。输出:

    A   B   C   D  E
0   0   1   2   3  1
1   4   5   6   7   
2   8   9  10  11   
3  12  13  14  15   
4  16  17  18  19   
问题 但是现在,我想设置第一行中“E”列的值,对于该列,“B”值大于8到3(与
df.loc[2,'E']=1相同,但使用该条件。我不知道它是先验的)

解决方案尝试 我试过不同的方法:

df.loc[df['B']>8,'E'].iloc[0]=3
df
这不会更改任何值:

    A   B   C   D  E
0   0   1   2   3  1
1   4   5   6   7   
2   8   9  10  11   
3  12  13  14  15   
4  16  17  18  19   
这同样适用于中国

df.loc[df['B']>8]['E'].iloc[0]=3
我尝试过的其他方法会导致错误
df.loc[df['B']>8,'E']=3
运行良好,但我只想在满足条件的第一行中赋值,而不是在所有行中赋值

那么如何实现这一点呢?

使用
.idxmax()
。由于
True
True
/
False
的最大值,因此它将返回布尔索引的第一个
True
值的索引

df.loc[(df['B']>8).idxmax(),'E']=3