pandas - 如何在pyspark中使用udf比较一对列?
问题描述
我有如下数据框
+---+---+---+
| t1| t2|t3 |
+---+---+---+
|0 |1 |0 |
+---+---+---+
我想将每一列与其他列进行比较。
例如 t1
列值0
和t2
列值是1
组合t1 and t2
列是1
。
我们必须申请logical oR
所有列对。
我的预期输出将如下所示:
+----+---+---+---+
|t123| t1|t2 | t3|
+----+---+---+---+
|t1 |0 |1 |0 |
|t2 |1 |0 |1 |
|t2 |0 |1 |0 |
+----+---+---+---+
请帮助我。
解决方案
尝试这个,
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)
解释:
- 根据需要将 df1 转换为逻辑 df
- 根据需要使用转置将 df2 转换为逻辑 df
- 在两个df中执行逻辑或
输出:
t1 t2 t3
0 0 1 0
1 1 1 1
2 0 1 0
推荐阅读
- c++ - 加密算法的字符串替换功能无法正常工作?
- php - 如何使用 PHP Mail 函数显示自己的标题文本而不是电子邮件前缀?
- iframe - 通过 onclick 关闭 I 帧视频
- python - 关于 IF - Else 阶梯的说明
- java - 如何显示 Hibernate 5.5.6 的查询
- regex - 使用正则表达式排除指定文本以提取某些数字,如 excel 中的 left()/Right() 函数
- angular - Angular 应用程序类型错误中的 TensorFlow.js
- javascript - Postgres INSERT 导致 UnhandledPromiseRejectionWarning
- laravel - 在laravel 8中搜索关系
- sql - bigquery中全外连接的优化