如何合并重复行并将所有 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 的值更改为文本值类型 我正在检查整个表中的行 注意该表是数据表类型?