提取特定单元格的值并将其填充到pyspark dataframe中以代替NA值

2024-10-01 15:32:02 发布

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

我正在将一个python代码转换为pyspark,在这里我尝试使用fillna,并使用来自同一数据帧但索引为0的另一列的值填充na值

下面是我正常工作的python代码:

df['Parent'].fillna(df.at[0, 'Sequence'], inplace=True) 

之前的数据帧结构:

df:
A       B       Sequence    Parent
QQQ     AAA     0251
WWW     SSS     0616            
EEE     DDD     0720            0616
RRR     FFF     0807            0720

之后的数据帧结构:

df:
A       B       Sequence    Parent
QQQ     AAA     0251            0251
WWW     SSS     0616            0251
EEE     DDD     0720            0616
RRR     FFF     0807            0720

我尝试了以下方法:

df.collect()[0]['Sequence'] # This gives different value each time.
df.fillna(df.select("Sequence")[0], subset=['Parent']) # Syntax is not correct

如有任何建议,我们将不胜感激


Tags: 数据代码dffffwww结构parentsequence
2条回答

您可以使用collect方法执行此操作,但要获得所需的值,请进行筛选:

value = df.filter(df["A"] == "QQQ").collect()[0]['Sequence']
df = df.fillna(value, ["Parent"])

我假设您希望使用序列的最小值填充NA。注意Spark没有索引的概念,所以像at index 0这样的说法是未定义的。为了使索引的概念有意义,您需要定义数据帧的顺序

import pyspark.sql.functions as F

df2 = df.fillna(df.select(F.min("Sequence")).collect()[0][0], subset=['Parent'])

相关问题 更多 >

    热门问题