gpt4 book ai didi

python - 将通过 FOR 循环函数输出的多个数据帧合并为一个数据帧

转载 作者:行者123 更新时间:2023-12-01 07:55:47 26 4
gpt4 key购买 nike

我有一个 FOR 循环函数,它迭代表和列的列表 (zip) 以获取最小值和最大值。每个组合的输出都是分开的,而不是单个数据帧/表。有没有一种方法可以将 FOR 循环的结果合并到函数内的一个最终输出中?

from pyspark.sql import functions as f

def minmax(tables, cols):
for table, column in zip(tables, cols):
minmax = spark.table(table).where(col(column).isNotNull()).select(f.lit(table).alias("table"), f.lit(column).alias("col"), min(col(column)).alias("min"),
max(col(column)).alias("max"))
minmax.show()
tables = ["sales_123", "sales_REW"]
cols = ["costs", "price"]

minmax(tables, cols)

函数的输出:

+---------+-----+---+---+
| table| col|min|max|
+---------+-----+---+---+
|sales_123|costs| 0|400|
+---------+-----+---+---+

+----------+-----+---+---+
| table| col|min|max|
+----------+-----+---+---+
|sales_REW |price| 0|400|
+----------+-----+---+---+

期望的输出:

+---------+-----+---+---+
| table| col|min|max|
+---------+-----+---+---+
|sales_123|costs| 0|400|
|sales_REW|price| 0|400|
+---------+-----+---+---+

最佳答案

将所有数据帧放入一个列表中,并在 for 循环后进行并集:

from functools import reduce
from pyspark.sql import functions as f
from pyspark.sql import DataFrame

def minmax(tables, cols):

dfs = []
for table, column in zip(tables, cols):
minmax = spark.table(table).where(col(column).isNotNull()).select(f.lit(table).alias("table"), f.lit(column).alias("col"), min(col(column)).alias("min"), max(col(column)).alias("max"))
dfs.append(minmax)
df = reduce(DataFrame.union, dfs)

请注意,所有涉及的数据帧的列顺序必须相同(如此处的情况)。否则可能会产生意想不到的结果。

关于python - 将通过 FOR 循环函数输出的多个数据帧合并为一个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55988959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com