Python:基于组内的最大值创建新列,但使用附加(字符串)列中的值
我有一个包含以下内容的熊猫数据框:Python:基于组内的最大值创建新列,但使用附加(字符串)列中的值,python,pandas,Python,Pandas,我有一个包含以下内容的熊猫数据框: import pandas as pd df = pd.DataFrame({'group_id': [1,1,2,2], 'name':['Arthur','Bob','Caroline','Denise'], 'income': [40000, 20000,50000,60000] }) df Out[94]: group_id
import pandas as pd
df = pd.DataFrame({'group_id': [1,1,2,2],
'name':['Arthur','Bob','Caroline','Denise'],
'income': [40000, 20000,50000,60000]
})
df
Out[94]:
group_id name income
0 1 Arthur 40000
1 1 Bob 20000
2 2 Caroline 50000
3 2 Denise 60000
我期望的输出是在组id中有收入最高者的姓名,例如:
df
Out[94]:
group_id name income highest_income_name
0 1 Arthur 40000 Arthur
1 1 Bob 20000 Arthur
2 2 Caroline 50000 Denise
3 2 Denise 60000 Denise
根据我实际数据的数据生成过程,在一个收入最高的组中,始终只有一个名称 生成上述内容的最佳实践方式是什么 如果我试着填写最大收入,然后找到名字,我会被NaN困住,我可能会尝试填写,但会增加复杂性
df['max_income'] = df.groupby('group_id')['income'].transform('max')
df['highest_income_name'] = df['name'][df['income']==df['max_income']]
df
Out[105]:
group_id name income max_income highest_income_name
0 1 Arthur 40000 40000 Arthur
1 1 Bob 20000 40000 NaN
2 2 Caroline 50000 60000 NaN
3 2 Denise 60000 60000 Denise
用于:
获取groupby中的最大收入指数。如果有两个收入最高的人,那么使用ilocwhat获取姓名?根据我实际数据的数据生成过程,在一个收入最高的组中,始终只有一个姓名,因此我可以检查这是否属实,然后不必处理有平局的情况。upvoces,很好的答案!。。。这里的max是否不阻止这种矢量化操作?
In [287]: import numpy as np
In [302]: df['highest_income_name'] = np.where(df.income.eq(df.groupby('group_id')['income'].transform(max)), df.name, np.nan)
In [308]: df['highest_income_name'] = df.groupby('group_id')['highest_income_name'].transform('first')
In [309]: df
Out[309]:
group_id name income highest_income_name
0 1 Arthur 40000 Arthur
1 1 Bob 20000 Arthur
2 2 Caroline 50000 Denise
3 2 Denise 60000 Denise