首页 > 解决方案 > 如何在pyspark中使用udf比较一对列?

问题描述

我有如下数据框

+---+---+---+
| t1| t2|t3 |
+---+---+---+
|0  |1  |0  |
+---+---+---+

我想将每一列与其他列进行比较。

例如 t1列值0t2列值是1组合t1 and t2列是1

我们必须申请logical oR所有列对。

我的预期输出将如下所示:

+----+---+---+---+
|t123| t1|t2 | t3|
+----+---+---+---+
|t1  |0  |1  |0  |
|t2  |1  |0  |1  |
|t2  |0  |1  |0  |
+----+---+---+---+

请帮助我。

标签: pandasapache-sparkpysparkapache-spark-sqlpyspark-sql

解决方案


尝试这个,

cols=df.columns
n=len(cols)
df1=pd.concat([df]*n,ignore_index=True).eq(1)
df2= pd.concat([df.T]*n,axis=1,ignore_index=True).eq(1)
df2.columns=cols
df2=df2.reset_index(drop=True)
print (df1|df2).astype(int)

解释:

  1. 根据需要将 df1 转换为逻辑 df
  2. 根据需要使用转置将 df2 转换为逻辑 df
  3. 在两个df中执行逻辑或

输出:

   t1  t2  t3
0   0   1   0
1   1   1   1
2   0   1   0

推荐阅读