将 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
,我想获得最大值(但如果它太复杂,那么我可以使用23
或45
)。预期输出:
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】:
您还可以将lambda
与transform
一起使用
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 替换为组的现有值的主要内容,如果未能解决你的问题,请参考以下文章