python - 如何使用 pandas 创建一个列的 max values 的新列(对应于特定名称)?

我想知道是否可以使用 Pandas 为列的 max values 创建一个新列(对应不同的名称,这样每个名称都会有一个 max value)。

例如:

name    value    max
Alice    1        9
Linda    1        1
Ben      3        5
Alice    4        9
Alice    9        9
Ben      5        5
Linda    1        1

所以对于 Alice,我们选择 1、4 和 9 中的 max,即 9。对于 Linda max(1,1) = 1,对于 Ben max(3,5) = 5。

我正在考虑使用 .loc 选择 name == "Alice",然后获取这些行的 max value,然后创建新列。但由于我正在处理一个大型数据集,这似乎不是一个好的选择。有没有更聪明的方法来做到这一点,这样我就不需要知道具体的名字了?

回答1

groupby 并采用 max 给出 max 的名称,然后将其与原始 df 合并

df.merge(df.groupby(['name'])['value'].max().reset_index(), 
         on='name').rename(
                    columns={'value_x' : 'value', 
                             'value_y' : 'max'})
name    value   max
0   Alice   1   9
1   Alice   4   9
2   Alice   9   9
3   Linda   1   1
4   Linda   1   1
5   Ben     3   5
6   Ben     5   5

回答2

您可以使用 transformmap

df['max'] = df.groupby('name')['value'].transform('max')

或者

df['max'] = df['name'].map(df.groupby('name')['value'].max())

相似文章

python - Python - 在多行和多列中比较 values

我是Python的新手,我有一个如下所示的数据框(请参阅原始数据table)。最终目标是协调来自2个系统(sys1与sys2,在“源”列中标记)的记录(即id、rg、prd和数量)。我如何使用1个函数...