如何使用 pandas 创建一列(对应于特定名称)的最大值的新列?
How do I create a new column of max values of a column(corresponding to specific name) using pandas?
我想知道是否可以使用Pandas为一列的最大值创建一个新列(对应不同的名称,这样每个名称都会有一个最大值)。
举个例子:
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 中的最大值,即 9。对于 Linda max(1,1) = 1,对于 Ben max(3,5) = 5。
我正在考虑使用 .loc
到 select name == "Alice"
,然后获取这些行的最大值,然后创建新列。但由于我正在处理大型数据集,这似乎不是一个好的选择。有没有更聪明的方法来做到这一点,这样我就不需要知道具体的名字了?
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
您可以使用 transform
或 map
df['max'] = df.groupby('name')['value'].transform('max')
或
df['max'] = df['name'].map(df.groupby('name')['value'].max())
我想知道是否可以使用Pandas为一列的最大值创建一个新列(对应不同的名称,这样每个名称都会有一个最大值)。
举个例子:
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 中的最大值,即 9。对于 Linda max(1,1) = 1,对于 Ben max(3,5) = 5。
我正在考虑使用 .loc
到 select name == "Alice"
,然后获取这些行的最大值,然后创建新列。但由于我正在处理大型数据集,这似乎不是一个好的选择。有没有更聪明的方法来做到这一点,这样我就不需要知道具体的名字了?
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
您可以使用 transform
或 map
df['max'] = df.groupby('name')['value'].transform('max')
或
df['max'] = df['name'].map(df.groupby('name')['value'].max())