与 Pyspark 和 When 结合使用的逻辑

发布于 2025-01-11 12:32:33 字数 1489 浏览 0 评论 0原文

我有下面的数据框:

customer_idperson_idtype_persontype_person2insert_date2anterior_typeupdate_date
abcdefghijklmnopqrst4a5ae8a5-6682-467OnlineOnline2022-03-02nullnull
abcdefghijklmnopqrst1be8d3e8-8075-438OnlineOnline2022-03-02nullnull
abcdefghijklmnopqrst6912dadc-1692-4bd在线离线2022-03-02在线2022-03-03
abcdefghijklmnopqrste48cba37-113c-4bd在线在线2022-03-02nullnull
abcdefghijklmnopqrst831cb669-b2ae-4e8在线在线2022-03-02nullnull
abcdefghijklmnopqrst69161fe5-62ac-400在线在线2022-03-02nullnull
abcdefghijklmnopqrstb48b59a0-92eb-410在线在线2022-03-02nullnull

我需要查看“type_person”和“type_person2”列,并使用以下规则创建一个新列:

  • 如果两者都在线,则在线
  • 如果两者都离线,则离线
  • 如果一个离线,一个在线,则混合
  • 如果一个在线一个是离线的,然后是混合的
  • 如果两者之一是混合的,那么是混合的

我该怎么做?

I have the dataframe below:

customer_idperson_idtype_persontype_person2insert_date2anterior_typeupdate_date
abcdefghijklmnopqrst4a5ae8a5-6682-467OnlineOnline2022-03-02nullnull
abcdefghijklmnopqrst1be8d3e8-8075-438OnlineOnline2022-03-02nullnull
abcdefghijklmnopqrst6912dadc-1692-4bdOnlineOffline2022-03-02Online2022-03-03
abcdefghijklmnopqrste48cba37-113c-4bdOnlineOnline2022-03-02nullnull
abcdefghijklmnopqrst831cb669-b2ae-4e8OnlineOnline2022-03-02nullnull
abcdefghijklmnopqrst69161fe5-62ac-400OnlineOnline2022-03-02nullnull
abcdefghijklmnopqrstb48b59a0-92eb-410OnlineOnline2022-03-02nullnull

I need to look at the ´type_person´ and ´type_person2´ columns and create a new column with the following rules:

  • If both are online then online
  • If both are offline then offline
  • If one is offline and one is online then hybrid
  • If one is online and one is offline then hybrid
  • If either of the two is hybrid then hybrid

How do I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一笔一画续写前缘 2025-01-18 12:32:33

使用 case when 语句。

您有两种选择。

  1. 使用 SparkSQL
  2. 数据帧操作。 (参考:https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.functions.when.html?highlight=when#pyspark.sql.functions.when< /code>)

让我们使用第二种方法:

import pyspark.sql.functions as F
(
DF
.withColumn('rule_result', 
   F.when(F.col("type_person") == 'online' & F.col("type_person2") == 'online', 'online')
   .when(F.col("type_person") == 'offline' & F.col("type_person2") == 'online', 'offline')
   .when(F.col("type_person") == 'offline' & F.col("type_person2") == 'online', 'hybrid')
   .when(F.col("type_person") == 'online' & F.col("type_person2") == 'offline', 'hybrid')
   .when(F.col("type_person") == 'hybrid' | F.col("type_person2") == 'hybrid', 'hybrid')
 .otherwise(None)
)

Use case when statement.

You have two options to do so.

  1. Using SparkSQL
  2. DataFrame Manipulation. (Ref: https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.functions.when.html?highlight=when#pyspark.sql.functions.when)

Let's do it using the 2nd way:

import pyspark.sql.functions as F
(
DF
.withColumn('rule_result', 
   F.when(F.col("type_person") == 'online' & F.col("type_person2") == 'online', 'online')
   .when(F.col("type_person") == 'offline' & F.col("type_person2") == 'online', 'offline')
   .when(F.col("type_person") == 'offline' & F.col("type_person2") == 'online', 'hybrid')
   .when(F.col("type_person") == 'online' & F.col("type_person2") == 'offline', 'hybrid')
   .when(F.col("type_person") == 'hybrid' | F.col("type_person2") == 'hybrid', 'hybrid')
 .otherwise(None)
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文