从 groupby 2 列之后的第 3 列获取相应的值

cco*_*929 5 python group-by pandas

以下代码对每个类别的“时间”最大值进行分组。我想获得“目标”变量中的相应值,但我不知道如何去做。任何提示?

import numpy as np
import pandas as pd

data=[[1,1,2,2,'A'],
      [2,5,5,1,'A'],
      [3,7,9,4,'B'],
      [1,5,1,9,'B'],
      [1,8,2,8,'C'],
      [2,8,5,10,'C'],
      [0,1,2,3,'D']]

df=pd.DataFrame(data, columns=['time','x','y','target','categ'])
res = ((df.groupby('categ')['time'].max().value_counts(ascending=True).sort_index()))
print(res)
Run Code Online (Sandbox Code Playgroud)

Hen*_*ker 3

我们可以使用loc+ groupby idxmax

res = df.loc[
    df.groupby('categ')['time'].idxmax(),
    ['time', 'target']
].sort_values('time')['target']
Run Code Online (Sandbox Code Playgroud)

res

6     3
1     1
5    10
2     4
Name: target, dtype: int64
Run Code Online (Sandbox Code Playgroud)

或者groupby transform如果需要与组最大值匹配的所有行,则使用 max 进行过滤:

res = df.loc[
    df.groupby('categ')['time'].transform('max').eq(df['time']),
    ['time', 'target']
].sort_values('time')['target']
Run Code Online (Sandbox Code Playgroud)

res

6     3
1     1
5    10
2     4
Name: target, dtype: int64
Run Code Online (Sandbox Code Playgroud)

*在这种情况下,输出是相同的,但如果每个 都有重复的最大值,则输出不会相同categ


groupby agg根据评论并time汇总到列表中:

res = df.groupby('time')['target'].agg(list)
Run Code Online (Sandbox Code Playgroud)

res

time
0          [3]
1    [2, 9, 8]
2      [1, 10]
3          [4]
Name: target, dtype: object
Run Code Online (Sandbox Code Playgroud)