【问题标题】:Replace column value with other column when two other columns have equal value当其他两列具有相等值时,将列值替换为另一列
【发布时间】:2020-10-06 17:34:19
【问题描述】:

所以我有一个像这样的数据框:

+--------------------+--------------+------------+-----------+-----------+-----------+-----------+
|     category       |category_new  |     value  |     body  |     legs  |     face  |     idle  |
+--------------------+--------------+------------+-----------+-----------+-----------+-----------+
| sn11               | sn11         | N          | Y         | Y         | Y         | acde      |
| sn1                | rs1          | N          | Y         | N         | N         | den       |
| sn1                | null         | Y          | N         | Y         | N         | can       |
| sn2                | rs2          | Y          | Y         | N         | N         | aeg       |
| null               | rs2          | N          | Y         | N         | Y         | ueg       |
+--------------------+--------------+------------+-----------+-----------+-----------+-----------+

body==legs 时,我想用人脸替换value。所以对于bodylegs 都是Y 的第一行,我将value (N) 的值替换为face (Y) 的值。

你知道如何处理它吗?

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    您可以使用来自pyspark.sql.functions 的函数when 做到这一点:

    from pyspark.sql import functions as F
    
    df = df.withColumn('value', F.when(F.col('body') == F.col('legs'), F.col('face')).otherwise(F.col('value')))
    

    【讨论】:

      【解决方案2】:

      也许你可以尝试使用pandas.DataFrame.assign

      >>> import pandas as pd
      >>> df = pd.DataFrame([
      ...   ['sn11','N','Y','Y','Y'],
      ...   ['sn1','N','Y','N','N'],
      ...   ['sn1','Y','N','Y','N'],
      ...   ['sn2','Y','Y','N','N'],
      ...   ['null','N','Y','N','Y']
      >>> df
        category value body legs face
      0     sn11     N    Y    Y    Y
      1      sn1     N    Y    N    N
      2      sn1     Y    N    Y    N
      3      sn2     Y    Y    N    N
      4     null     N    Y    N    Y
      >>> df[df['body']==df['legs']] = df[df['body']==df['legs']].assign(value=df['face'])
      >>> df
        category value body legs face
      0     sn11     Y    Y    Y    Y
      1      sn1     N    Y    N    N
      2      sn1     Y    N    Y    N
      3      sn2     Y    Y    N    N
      4     null     N    Y    N    Y
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-07
        • 2017-04-21
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多