我有一个产品数据库,我必须验证产品ID是否在一列中重复,还必须验证它在另一列中是否为"真"或"假".然后,如果至少有一个复制行为"真",则将all设置为"真".

我在这个链接中找到了一种方法:Create rule for sets of duplicates in a Pandas Dataframe使用第二个答案,但它在我的数据库中花费了太多的时间,比如8分钟.

有人知道如何更快地做到这一点吗?

例子:

ID Active 
01 False
01 False
01 True
02 False
02 False
03 True
03 False
03 False

最后应该是这样的:

ID Active 
01 True
01 True
01 True
02 False
02 False
03 True
03 True
03 True

推荐答案

您可以方便地在groupby.transform中使用max:

df['Active'] = df.groupby('ID')['Active'].transform('max')

或者快一点的any:

df['Active'] = df.groupby('ID')['Active'].transform('any')

输出:

   ID  Active
0   1    True
1   1    True
2   1    True
3   2   False
4   2   False
5   3    True
6   3    True
7   3    True

Python相关问答推荐

从包含数字和单词的文件中读取和获取数据集

Python -根据另一个数据框中的列编辑和替换数据框中的列值

如何根据条件在多指标框架上进行groupby

使用索引列表列表对列进行切片并获取行方向的向量长度

如何找到满足各组口罩条件的第一行?

如果值不存在,列表理解返回列表

Python库:可选地支持numpy类型,而不依赖于numpy

如何在python polars中停止otherate(),当使用when()表达式时?

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

OR—Tools CP SAT条件约束

Pre—Commit MyPy无法禁用非错误消息

梯度下降:简化要素集的运行时间比原始要素集长

关于Python异步编程的问题和使用await/await def关键字

所有列的滚动标准差,忽略NaN

什么是最好的方法来切割一个相框到一个面具的第一个实例?

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

幂集,其中每个元素可以是正或负""""

Regex用于匹配Python中逗号分隔的AWS区域

将字节序列解码为Unicode字符串

用由数据帧的相应元素形成的列表的函数来替换列的行中的值