python—当其他两列的值相等时,用其他列替换列值

5sxhfpxr  于 2021-05-24  发布在  Spark
关注(0)|答案(2)|浏览(406)

所以我有一个Dataframe,比如:

+--------------------+--------------+------------+-----------+-----------+-----------+-----------+
|     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       |
+--------------------+--------------+------------+-----------+-----------+-----------+-----------+

我想替换 value 什么时候有脸 body==legs . 第一排呢 body 以及 legs 两者都是y,我将替换 value (n) 价值 face (y) 是的。
你知道怎么做吗?

s8vozzvw

s8vozzvw1#

你可以用函数来做 whenpyspark.sql.functions :

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')))
vc6uscn9

vc6uscn92#

也许您可以尝试使用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

相关问题