我有一个情况如下。我有一个主数据帧DF1。我在for循环中进行处理以反映更改,我的伪代码如下:
for Year in [2019, 2020]:
query_west = query_{Year}
df_west = spark.sql(query_west)
df_final = DF1.join(df_west, on['ID'], how='left')
在这种情况下,df_final正在与查询连接并在每次迭代中更新,对吗?我希望在for循环内的每次迭代中,变化都反映在主数据框架DF1上。
请告诉我我的逻辑是否正确。谢谢。
正如@venky__的评论所建议的那样,您需要在for循环的末尾添加另一行DF1 = df_final
,以确保DF1在每次迭代中都得到更新。
另一种方法是使用reduce
一次性将所有连接组合起来。例如
from functools import reduce
dfs = [DF1]
for Year in [2019, 2020]:
query_west = f'query_{Year}'
df_west = spark.sql(query_west)
dfs.append(df_west)
df_final = reduce(lambda x, y: x.join(y, 'ID', 'left'), dfs)
相当于
df_final = DF1.join(spark.sql('query_2019'), 'ID', 'left').join(spark.sql('query_2020'), 'ID', 'left')