gpt4 book ai didi

python - Groupby 名称用所有列中的最大值替换值 pandas

转载 作者:行者123 更新时间:2023-12-02 11:24:09 25 4
gpt4 key购买 nike

我有这个数据框

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")

最佳答案

尝试使用 pd.wide_to_long将该数据框融合为长形式,然后使用 groupby 和变换来找到最大值。将该最大值映射到“名称”并重新整形为四列(宽)数据框:

df_long = pd.wide_to_long(df.reset_index(), ['name','val'], 'index', j='num',sep='',suffix='\d+')
mapper= df_long.groupby('name')['val'].max()
df_long['val'] = df_long['name'].map(mapper)
df_new = df_long.unstack()
df_new.columns = [f'{i}{j}' for i,j in df_new.columns]
df_new
输出:
      name1 name2  val1  val2
index
0 AAA BBB 31 22
1 BBB AAA 22 31
2 BBB CCC 22 15
3 CCC AAA 15 31
4 DDD EEE 25 35

关于python - Groupby 名称用所有列中的最大值替换值 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63400417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com