首页 > 解决方案 > Groupby 用最大值 pandas 替换值

问题描述

我有这个数据框

lst = [['AAA',15],['BBB',16],['BBB',22],['AAA',20],['CCC',11],['AAA',10]]
df = pd.DataFrame(lst,columns = ['name','val'])

看起来像这样

  name  val
0  AAA   15
1  BBB   16
2  BBB   22
3  AAA   20
4  CCC   11
5  AAA   10

我要这个

  name  val
0  AAA   20
1  BBB   22
2  BBB   22
3  AAA   20
4  CCC   11
5  AAA   20

全部替换为该组val的最大值name

到目前为止我做到了

dd = df.groupby('name')['val'].max().to_dict()

这会给我所有最大的字典,val现在我必须使用这本字典替换它们。

如果我在这之后这样做将替换所有的nameval但我想val根据那里替换所有的name

df.replace({"name": dd}) 

标签: pythonpython-3.xpandas

解决方案


lst = [['AAA',15],['BBB',16],['BBB',22],['AAA',20],['CCC',11],['AAA',10]]
df = pd.DataFrame(lst,columns = ['name','val'])

max = df.groupby('name').max()
df=df.merge(max,on='name')
del df['val_x']

print(df)
  name  val_y
0  AAA     20
1  AAA     20
2  AAA     20
3  BBB     22
4  BBB     22
5  CCC     11

推荐阅读