我的df是这样的:

df1 = 
AA  BB  CC  DD
1   X   Y   Z
2   M   N   O
3   P   Q   R

我还有另一个df,比如:

df2 =
BB  CC  DD
G   K   O
H   L   P
I   M   Q

我想为df1的‘aa’列的每个不同值复制df2的所有列和行,并获得结果df为:

df = 
AA  BB  CC  DD
1   X   Y   Z
1   G   K   O
1   H   L   P
1   I   M   Q
2   M   N   O
2   G   K   O
2   H   L   P
2   I   M   Q
3   P   Q   R
3   G   K   O
3   H   L   P
3   I   M   Q

我现在所做的是:

AAs = df1.select("AA").distinct().rdd.flatMap(lambda x: x).collect()
out= []
for i in AAs:
  dff = df1.filter(col('AA')==i)
  temp_df = (df1.orderBy(rand())
        .withColumn('AA', lit(i))
        )
  out.append(temp_df)
df = reduce(DataFrame.unionAll, out)

这花费了极长的时间并且使集群失效,因为这些是模拟的数据帧,实际的数据帧的维度相当大.有没有什么让人兴奋的方式呢?先谢谢你.

推荐答案

这将会奏效:

resultDf= df.select("AA")\
.crossJoin(df2)\
.union(df)

# No Need to order the actual result, this is just for displaying this example.
resultDf.orderBy("AA").show()

尽管如此,这仍将是一项庞大的操作,并且在群集上的成本可能很高.

输入

DF1:

+---+---+---+---+
| AA| BB| CC| DD|
+---+---+---+---+
|  1|  X|  Y|  Z|
|  2|  M|  N|  O|
|  3|  P|  Q|  R|
+---+---+---+---+

DF2:

+---+---+---+
| BB| CC| DD|
+---+---+---+
|  G|  K|  O|
|  H|  L|  P|
|  I|  M|  Q|
+---+---+---+

输出:

+---+---+---+---+
| AA| BB| CC| DD|
+---+---+---+---+
|  1|  G|  K|  O|
|  1|  X|  Y|  Z|
|  1|  I|  M|  Q|
|  1|  H|  L|  P|
|  2|  M|  N|  O|
|  2|  I|  M|  Q|
|  2|  H|  L|  P|
|  2|  G|  K|  O|
|  3|  P|  Q|  R|
|  3|  I|  M|  Q|
|  3|  H|  L|  P|
|  3|  G|  K|  O|
+---+---+---+---+

Python相关问答推荐

为什么使用SciPy中的Distance. cos函数比直接执行其Python代码更快?

合并其中一个具有重叠范围的两个框架的最佳方法是什么?

Python中使用Delivercio进行多个请求

将HLS纳入媒体包

计算相同形状的两个张量的SSE损失

如何在msgraph.GraphServiceClient上进行身份验证?

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

_repr_html_实现自定义__getattr_时未显示

按顺序合并2个词典列表

加速Python循环

数据抓取失败:寻求帮助

如何在python polars中停止otherate(),当使用when()表达式时?

如何获取numpy数组的特定索引值?

将输入聚合到统一词典中

pandas:排序多级列

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

什么是最好的方法来切割一个相框到一个面具的第一个实例?

如何使用SentenceTransformers创建矢量嵌入?

Python Pandas获取层次路径直到顶层管理

合并与拼接并举