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_index
与DataFrame.set_index
一起使用,但由于索引不同,因此由GroupBy.transform
创建的分配数组:GroupBy.transform
以上是关于Pandas:创建新列,其中包含按组列出的另一列中最大值的对应值的主要内容,如果未能解决你的问题,请参考以下文章