将 NaN 替换为组的现有值

Posted

技术标签:

【中文标题】将 NaN 替换为组的现有值【英文标题】:Replace NaN with existing value of the group 【发布时间】:2020-12-15 22:13:15 【问题描述】:
    Name     Value
0   AA        33
1   AA        24
2   BB        23
3   BB        NaN
4   CC        NaN
5   CC        23
6   CC        45

如何通过查看列Name 将这些NaN 替换为现有值?对于CC,我想获得最大值(但如果它太复杂,那么我可以使用2345)。预期输出:

    Name     Value
0   AA        33
1   AA        24
2   BB        23
3   BB        23
4   CC        45
5   CC        23
6   CC        45

谢谢!

【问题讨论】:

【参考方案1】:

您可以先分组,然后用 max 然后 fillna 进行变换:

df['Value'] = df['Value'].fillna(df.groupby("Name")['Value'].transform('max'))
print(df)

  Name  Value
0   AA   33.0
1   AA   24.0
2   BB   23.0
3   BB   23.0
4   CC   45.0
5   CC   23.0
6   CC   45.0

【讨论】:

太棒了!如果我想获得最小值,那么我只需将 max 更改为 min? @AK88 没错..!!【参考方案2】:

您还可以将lambdatransform 一起使用

df["Value"] = df.groupby('Name').transform(lambda x:x.fillna(x.max()))
df
  Name  Value
0   AA   33.0
1   AA   24.0
2   BB   23.0
3   BB   23.0
4   CC   45.0
5   CC   23.0
6   CC   45.0

【讨论】:

以上是关于将 NaN 替换为组的现有值的主要内容,如果未能解决你的问题,请参考以下文章

将视图宽度设置为组的较大视图

Pandas - 用特定组的平均值替换列中的 NaN

数据框中现有值的 Python 条件 NaN 值替换

Pandas:根据另一列的键在现有列上映射字典值以替换 NaN

用 NaN 替换矩阵的某些元素(MATLAB)

上一行的值有值,前一些行没有值