我有一个我想总结的列名列表
columns = ['col1','col2','col3']
如何添加这三个并将其放入新列中? (以自动方式,以便我可以更改列列表并获得新结果)
带有我想要的结果的数据框:
col1 col2 col3 result
1 2 3 6
原文由 Manrique 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个我想总结的列名列表
columns = ['col1','col2','col3']
如何添加这三个并将其放入新列中? (以自动方式,以便我可以更改列列表并获得新结果)
带有我想要的结果的数据框:
col1 col2 col3 result
1 2 3 6
原文由 Manrique 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以这样做:
from functools import reduce
from operator import add
from pyspark.sql.functions import col
df.na.fill(0).withColumn("result" ,reduce(add, [col(x) for x in df.columns]))
df.na.fill(0)
部分用于处理数据中的空值。如果您没有任何空值,则可以跳过它并改为执行此操作:
df.withColumn("result" ,reduce(add, [col(x) for x in df.columns]))
如果你有列的静态列表,你可以这样做:
df.withColumn("result", col("col1") + col("col2") + col("col3"))
但是,如果您不想键入整个列列表,则需要迭代生成短语 col("col1") + col("col2") + col("col3")
。为此,您可以使用 reduce
方法和 add
函数来获取:
reduce(add, [col(x) for x in df.columns])
这些列一次添加两列,因此您将得到 col(col("col1") + col("col2")) + col("col3")
而不是 col("col1") + col("col2") + col("col3")
。但是效果是一样的。
col(x)
确保您得到 col(col("col1") + col("col2")) + col("col3")
而不是简单的字符串连接(生成 ( col1col2col3
)。
原文由 Dileep Kumar Patchigolla 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答857 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
尝试这个:
df.columns
将是来自 df 的列列表。