我有这个DataFrame
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
的字典,现在我必须使用此字典替换它们。
如果我在此之后执行此操作,则会将所有name
替换为val
,但我想根据那里的val
替换所有name
df.replace({"name": dd})
答案 0 :(得分:3)
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
答案 1 :(得分:3)
如果您希望/需要翻阅字典,可以DataFrame.apply()进行修改的功能:
import pandas as pd
lst = [['AAA',15],['BBB',16],['BBB',22],['AAA',20],['CCC',11],['AAA',10]] df = pd.DataFrame(lst,columns = ['name','val']) dd = df.groupby('name')['val'].max().to_dict()
df["val"] = df["name"].apply(lambda d: dd[d])
print (df)
或Ch3steR在评论中指出
df["val"] = df["name"].map(dd)
看起来更聪明。参见Series.map()。
输出:
name val
0 AAA 20
1 BBB 22
2 BBB 22
3 AAA 20
4 CCC 11
5 AAA 20