使用for循环条件从多个PySpark数据帧获取唯一的列值

2024-09-27 07:35:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有2个PySpark数据帧(DF1DF2),我想循环两个数据帧中的一些列(colAcolB来自{};colZ来自{})并得到不同的值。在

DF1:

colA colB colC
    1    1    A
    3    1    Y

DF2:

^{pr2}$

输出:

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()

Tags: 数据dfnewvaluecolumnselectdf1df2
1条回答
网友
1楼 · 发布于 2024-09-27 07:35:46

我不太清楚你想在这里达到什么目的,但我会这样做的。在

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)

相关问题 更多 >

    热门问题