如何解决Groupby用那里的最大值熊猫替换值
我有这个DataFrame
lst = [['AAA',15],['BBB',16],22],['AAA',20],['CCC',11],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})
解决方法
lst = [['AAA',15],['BBB',16],22],['AAA',20],['CCC',11],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
,
如果您希望/需要翻阅字典,可以DataFrame.apply()进行修改的功能:
import pandas as pd
lst = [['AAA','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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。