【发布时间】:2020-12-03 14:42:15
【问题描述】:
我有这个数据框
lst = [['AAA',15,'BBB',20],['BBB',16,'AAA',12],['BBB',22,'CCC',15],['CCC',11,'AAA',31],['DDD',25,'EEE',35]]
df = pd.DataFrame(lst,columns = ['name1','val1','name2','val2'])
看起来像这样
name1 val1 name2 val2
0 AAA 15 BBB 20
1 BBB 16 AAA 12
2 BBB 22 CCC 15
3 CCC 11 AAA 31
4 DDD 25 EEE 35
我想要这个
name1 val1 name2 val2
0 AAA 31 BBB 22
1 BBB 22 AAA 31
2 BBB 22 CCC 15
3 CCC 15 AAA 31
4 DDD 25 EEE 35
用最大值替换所有值。我们从val1和val2中选择最大值
如果我这样做,我将只从 val1 获得最大值
df["val1"] = df.groupby("name1")["val1"].transform("max")
【问题讨论】:
-
name2 不应该是字符串而不是数字吗?
-
您的 BBB 输入的 val2 为 12 和 15 - 为什么您的输出有 31 和 15?
-
@HenryYik 我的错误编辑了它
-
为什么有 2 组列(
name1和name2和val1和val2)?为什么不能有一个name列和一个val列,有充分的理由吗? -
@JonClements BBB val1 和 val2 的最大值为 22,因此将所有 BBB 替换为 22
标签: python python-3.x pandas pandas-groupby