如何合并重复行并将所有 False 值更改为 True,其中 True 是重复行中的值?

Posted

技术标签:

【中文标题】如何合并重复行并将所有 False 值更改为 True,其中 True 是重复行中的值?【英文标题】:How do I merge duplicate rows and change all False values into True where True is the value in the duplicate rows? 【发布时间】:2019-12-24 18:34:41 【问题描述】:

所以我有一个有很多重复的数据框,但问题是它们是这样的-

  Color  ID
1 False  123456
2 True   123456
3 False  0987
4 False  0987
5 True   0987

在本例中,我想合并所有重复的 ID 并将所有内容设为 True,但前提是 color 列中有 True

这是我的预期输出

       ID  Color
0     987   True
1  123456   True

但我想为每一列都这样做,而不仅仅是一个(在本例中为 Color)。

【问题讨论】:

你的预期输出是什么? 【参考方案1】:

我们有any

out=df.groupby('ID',as_index=False).Color.any()
out
Out[55]: 
       ID  Color
0     987   True
1  123456   True

【讨论】:

好的。我现在如何对所有列执行此操作? 您能否为一个有代表性的示例展示您的预期输出? @Ravaal 我假设这是 PySpark DF 错误,但它不接受 as_index=False.any()。不过可能不是你的问题 我认为这个答案显示了pandas 解决方案,而不是pyspark ;) 我知道。我更喜欢 PySpark 解决方案,但如果无法获得,我将不得不收集所有数据,这需要一段时间【参考方案2】:

这应该在 pyspark 中工作:

from pyspark.sql import functions as f
from pyspark.sql.functions import *

df.groupBy('ID').agg(
     f.max(f.col('Color')).alias('Color')
)

或者:

from pyspark.sql import functions as f
from pyspark.sql.functions import *

df.groupBy('ID').agg(
     f.max(f.when(f.col('Color'), lit(1)).otherwise(lit(0))).cast('boolean').alias('Color')
)

【讨论】:

谢谢!我自己想出来的,但基本上和你发布的一样。

以上是关于如何合并重复行并将所有 False 值更改为 True,其中 True 是重复行中的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 true 或 false 的值更改为文本值类型 我正在检查整个表中的行 注意该表是数据表类型?

在while循环中将布尔值更改为true? C++

如何更改数组中的布尔值?

我如何将queryString值更改为(int)[重复]

如何在 Django 管理员 ListView 中将 True 值更改为绿色检查

如何在 jQuery 导出时将 dataTables 中的所有 tableHeader 值更改为大写