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

标签 python pandas dataframe indexing variable-assignment

我有一个 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 的最大值,因此它将返回 bool 值的第一个 True 值的索引索引。

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

关于python - 为满足条件的第一行中的数据框赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64322872/

相关文章:

Python:查找字典中的差异

python - 优化矩阵遍历/通用代码优化

python - 计算数据框中各组之间的欧式距离

python - Pandas :如何分组并计算给定列中的唯一性?

python - 如何根据列值的长度过滤数据框行

java - 无法从 py4j 中的 Python 启动网关

python - 性能差异 : obj. __setitem__(x,y) 与 obj[x] = y?

python - 在Python中编写csv

在 pandas Dataframe 的任意切片中以 Python 方式递增数字

python - 按组计数并分配给新变量