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

2024-10-06 14:25:50 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有一个数据帧,如:

+--------------------+--------------+------------+-----------+-----------+-----------+-----------+
|     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时,我想用face替换value。因此,对于bodylegs都是Y的第一行,我将用face(Y)的值替换value(N)的值

你知道怎么做吗


Tags: 数据newvaluebodynullfaceidlecategory
2条回答

您可以使用来自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')))

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

相关问题 更多 >