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

assign value to dataframe in the first line meeting a condition

我有一个 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 的最大值,它将 return 布尔索引的第一个 True 值的索引。

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