【问题标题】:get unique column values from multiple PySpark dataframes using a for loop condition使用 for 循环条件从多个 PySpark 数据帧中获取唯一的列值
【发布时间】:2019-04-01 07:47:01
【问题描述】:

我有 2 个 PySpark 数据帧(DF1DF2),并希望循环遍历其中的一些列(colAcolB 来自 DF1colZ 来自 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()

【问题讨论】:

    标签: python pandas dataframe pyspark pyspark-sql


    【解决方案1】:

    我不太清楚你想在这里实现什么,但我会这样做。

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2020-05-13
      • 2021-08-21
      • 1970-01-01
      相关资源
      最近更新 更多