Pandas groupby在一列上,聚合在第二列,保留第三列

时间:2017-01-27 12:07:23

标签: python pandas group-by

我有以下数据框:

df = pd.DataFrame({'key1': (1,1,1,2), 'key2': (1,2,3,1), 'data1': ("test","test2","t","test")})

我想按key1分组并拥有data1的min。此外,我想保留key2的相应值而不对其进行分组。

df.groupby(['key1'], as_index=False)['data1'].min()

得到我:

key1 data1  
1    t  
2    test  

但我需要:

key1 key2 data1  
1    3    t  
2    1    test  

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用groupby.apply并检索x['data1']==x['data1'].min()等于True的所有实例,同时保留未分组的列,如下所示:

df.groupby('key1', group_keys=False).apply(lambda x: x[x['data1'].eq(x['data1'].min())])

enter image description here

要知道哪些元素返回True,我们稍后会从中对DF进行子集化:

df.groupby('key1').apply(lambda x: x['data1'].eq(x['data1'].min()))

key1   
1     0    False
      1    False
      2     True
2     3     True
Name: data1, dtype: bool