Python中DataFrame中列的条件更新

2024-10-01 07:36:25 发布

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

我需要根据其中一列中的值有条件地更新dataframe中的列。在

例如,基于COL9中的值,我希望新列COL10具有值a/B/C(假设基于以下条件)

0.00-0.50 : A
0.51-0.75 : B
0.75-1.00 : C

预期产量:

^{pr2}$

这能否以高效的方式完成?在


Tags: dataframe方式条件产量pr2col9col10
3条回答

您可以使用pd.cut()并按您想要的方式标记类别:

import pandas as pd
df['col10'] = pd.cut(df['col9'], [0, 0.5, 0.75, 1], labels = list("ABC"))

enter image description here

对于用户定义函数(UDF),这是一个完美的情况。如果您需要更大的灵活性(例如,从您的输入中创建多个列),那么您可以查看transformers。在

您的自定义项如下所示:

from pyspark.sql.functions import udf

def colToString(num):
    if num >= 0 and num < 0.5: return 'A'
    elif num >= 0.5 and num < 0.75: return 'B'
    elif num >= 0.75 and num < 1.0: return 'C'
    else: return 'D'

myUdf = udf(colToString, StringType())
df.withColumn("col10", myUdf('col9'))

这里,myUdf接受一个双精度参数并返回一个字符串。从输入列col9读取双精度值。在

关键是使用数据帧操作来执行此操作,而不是Pandas。熊猫不会以分散的方式执行您的操作,而Spark会。在

虽然使用pandas数据帧有一个很好的答案,但是既然你在标签中提到了pyspark,我想你是指spark dataframes?在

如果是这样,您可以这样做:

import pyspark.sql.functions.when,lit

newDF = df.withColumn("col10", when(df["col9"] < 0.5, lit("A")).otherwise(when(df["col9"] > 0.75, lit("C")).otherwise(lit("B"))

我假设列的合法值是0-1,但是如果需要显式地检查它们,只需更改条件并为非法值添加额外的when/other

相关问题 更多 >