Pandas:创建新列,其中包含按组列出的另一列中最大值的对应值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas:创建新列,其中包含按组列出的另一列中最大值的对应值相关的知识,希望对你有一定的参考价值。

我想创建一个新的列,其中包含按组在另一列中的最大值的对应值。最好用示例来解释:

data = 'group':['g1', 'g1', 'g1', 'g1', 'g1', 'g1', 'g2', 'g2', 'g2', 'g2', 'g2'], 
                    'A':[3, 1, 8, 2, 6, -1, 0, 13, -4, 0, 1], 
                    'B':[5, 2, 3, 7, 11, -1, 4,-1, 1, 0, 2] 
df = pd.DataFrame(data)
df

以下解决方案是一种快捷方式,但是我觉得有更好的方法:

df.loc[:, 'Amax'] = df.loc[df.groupby('group')['B'].idxmax(), 'A']
df.loc[:, 'Amax'] = df.groupby('group')['Amax'].transform('median')

   group   A   B  Amax
0     g1   3   5   6.0
1     g1   1   2   6.0
2     g1   8   3   6.0
3     g1   2   7   6.0
4     g1   6  11   6.0
5     g1  -1  -1   6.0
6     g2   0   4   0.0
7     g2  13  -1   0.0
8     g2  -4   1   0.0
9     g2   0   0   0.0
10    g2   1   2   0.0
答案
使用transform

df['Amax']=df.loc[df.groupby('group')['B'].transform('idxmax'),'A'].values df Out[42]: group A B Amax 0 g1 3 5 6 1 g1 1 2 6 2 g1 8 3 6 3 g1 2 7 6 4 g1 6 11 6 5 g1 -1 -1 6 6 g2 0 4 0 7 g2 13 -1 0 8 g2 -4 1 0 9 g2 0 0 0 10 g2 1 2 0

另一答案
DataFrame.set_indexDataFrame.set_index一起使用,但由于索引不同,因此由GroupBy.transform创建的分配数组:

GroupBy.transform

以上是关于Pandas:创建新列,其中包含按组列出的另一列中最大值的对应值的主要内容,如果未能解决你的问题,请参考以下文章

如何计算包含一组列中的值和 Pandas 数据框中另一列中的另一个值的行数?

如果匹配,如何合并两个数据帧并从新列中的另一列返回数据?

Pandas - 基于 str 包含从另一列创建新列/值

Pandas:根据另一列的百分比增长率创建一个新列

根据与另一列的部分匹配创建新列

根据 Pandas 中另一列中的索引从列中获取数据