为满足条件的第一行中的数据框赋值
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()
。由于 True
是 True
/False
的最大值,它将 return 布尔索引的第一个 True
值的索引。
df.loc[(df['B']>8).idxmax(),'E']=3
我有一个 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()
。由于 True
是 True
/False
的最大值,它将 return 布尔索引的第一个 True
值的索引。
df.loc[(df['B']>8).idxmax(),'E']=3