为满足条件的第一行中的数据帧赋值



我有一个pandas数据帧,我想添加一列并根据某些条件设置某些值。

初始化

参见以下示例:

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   

问题

但现在,我想将第一行中'B'值大于8的'E'列的值设置为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()。由于TrueTrue/False的最大值,因此它将返回布尔索引的第一个True值的索引。

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