nrc*_*001 0 python dataframe 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
Run Code Online (Sandbox Code Playgroud)
以下解决方案可用作快捷方式,但我觉得有更好的方法来做到这一点:
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
Run Code Online (Sandbox Code Playgroud)
用 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |