如何在自己的groupby函数中使用groupby max?

问题描述 投票:0回答:1

我有以下df

d = {'CAT':['C1','C2','C1','C2'],'A': [10, 20,30,40], 'B': [3, 4,10,3]}
df1 = pd.DataFrame(data=d)

我想加入一个新的列,用'A'除以最高的'B',得到的是类别('CAT')。也就是说,我想把10除以10,20除以4,10除以10,40除以4,得到以下df。

d = {'CAT':['C1','C2','C1','C2'],'A': [10, 20,30,40], 'B': [3, 4,10,3], 'C':[1,5,3,10]}

有什么建议吗?



我觉得很容易做到,不用在CAT上conditiongroupby

d = {'A': [10, 20,30,40], 'B': [3, 4,10,3]}
df1 = pd.DataFrame(data=d)
df1 = df1.apply(lambda x:x.A/max(df1['B']),axis=1)

但对于'CAT',我有一个难题。

python pandas pandas-groupby
1个回答
1
投票

你可以在一行中完成;为了更清晰,我只把它分成几行。变换 允许在整个数据框架中复制groupby,这样我们就可以得到列C的结果。

grouping = df1.groupby("CAT").B.transform("max")
df1['C'] = df1.A.div(grouping)
df1



    CAT A   B   C
0   C1  10  3   1.0
1   C2  20  4   5.0
2   C1  30  10  3.0
3   C2  40  3   10.0

0
投票

使用apply就差不多了。根据你实际数据集的大小,使用 apply 可以 工作效率低下,但忽略这一点,你可以通过数据框的过滤器上的'max'函数来解决你的问题,而不是df本身。

或者,只是为了得到代码。

df1['calculation'] = df1.apply(lambda row: row['A'] / max(df1[df1['CAT'] == row['CAT']]['B']), axis=1)
© www.soinside.com 2019 - 2024. All rights reserved.