python - 如果 Pandas 满足条件,则更新列

标签 python pandas dataframe

我有一个数据框要处理,我正在执行多项检查。

我正在检查“A”、“B”和“C”列下的重复值是否在 D 列下呈现相同的数字但符号相反。

<表类="s-表"> <头> A B C D E <正文> 1111 AAA 123 0.01 待替换的评论 2222 BBB 456 5 待替换的评论 3333 CCC 789 10 什么都不做 1111 AAA 123 -0.01 待替换的评论 2222 BBB 456 -5 待替换的评论 3333 CCC 789 -9 什么都不做

请看下面我的代码。当我尝试替换“E”栏下的注释时,它不起作用。我确定我做错了什么。 我很清楚我没有以最有效的方式编写代码,我仍然是一个新手。您能否以更有效的方式帮助我实现这一目标,以及出于好奇,如果我决定继续使用这种“非高效”方式,如何实现这一目标?

谢谢。

for i in range(0, len(df)-1):
    for j in range(i+1, len(df)):
        if (df['A'][i] == df['A'][j]) & (df['B'][i] == df['B'][j]) & (df['C'][i] == df['C'][j]) & (df['D'][i] + df['D'][j] = 0) :
            df['E'][i] = 'it works!'

最佳答案

我们可以分组ABC列上的数据帧以及一系列绝对值D 列,然后使用 sum transform D 列(因为如果这些对具有相反的符号,那么总和必须为零) 以检查是否存在大小相同但符号相反的对

df['E'] = df.groupby(['A', 'B', 'C', df['D'].abs()])['D'].transform('sum').eq(0) 

      A    B    C      D      E
0  1111  AAA  123   0.01   True
1  2222  BBB  456   5.00   True
2  3333  CCC  789  10.00  False
3  1111  AAA  123  -0.01   True
4  2222  BBB  456  -5.00   True
5  3333  CCC  789  -9.00  False

关于python - 如果 Pandas 满足条件,则更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67321585/

相关文章:

python - 如何使用 pymc 为贝叶斯网络制作条件概率表 (CPT)

python - 如何更改 2D 图像的 y 轴?

python - Flask CSRF 和 fetch API

python - 计算 Pandas DataFrame 中每个组的状态变化

python - 对 pandas 中的交叉表数据进行排序以获得更多集群热图

python - 提示输入,直到给出 2 个空行

python - Pandas groupby 根据列值和组大小份额选择前 N 行

python - pandas 数据框,将 index_col 设置为我的 csv 名称

python - 跨组的 Pyspark 示例数据框

python - Pandas:前 N 个以及剩余的总数。这对于每个组