我有2个PySpark数据帧(DF1
和DF2
),并希望从colA
的某些列(colB
,DF1
)开始循环; colZ
中的DF2
)在两个数据帧中,并获得不同的值。
DF1:
colA colB colC
1 1 A
3 1 Y
DF2:
colX colY colZ
1 1 A21
3 4 Y33
输出:
column value
colA 1
colA 3
colB 1
colZ A21
colZ Y33
此方法有效,但是尝试创建for循环并收集所得的不同值无效。(因为我有50个以上的数据帧)
df_combined = DF1.select('colA').dropDuplicates(['colA']).withColumn("new_column",lit("colA")).union(DF1.select('colB').dropDuplicates(['colB']).withColumn("new_column", lit("colB"))).union(DF2.select('colZ').dropDuplicates(['colZ']).withColumn("new_column", lit("colZ")))
df_combined.withColumnRenamed("colA", "column").withColumnRenamed("new_column", "value").show()
答案 0 :(得分:0)
对于您要在此处实现的目标,我还不太清楚,但这就是我会做到的方式。
import pandas as pd
DF1 = pd.DataFrame(data={'colA': [1, 3], 'colB': [1, 1], 'colC': ['A', 'Y']})
DF2 = pd.DataFrame(data={'colX': [1, 3], 'colY': [1, 4], 'colZ': ['A21', 'Y33']})
DF1 = DF1.stack().reset_index()[['level_1',0]].rename(columns={'level_1':'column',0:'value'}).drop_duplicates(subset=['column', 'value'])
def transformAndAppend(df):
df = df.stack().reset_index()[['level_1', 0]].rename(columns={'level_1': 'column', 0: 'value'}).drop_duplicates(subset=['column', 'value'])
return DF1.append(df)
DF1 = transformAndAppend(DF2)
DF1 = DF1.loc[(DF1['column'] == 'colA') | (DF1['column'] == 'colB') | (DF1['column'] == 'colZ')]
print(DF1)