Skip to main content
 首页 » 编程设计

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

2024年10月01日1dflying

我有以下数据框:

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

我想按 key1 分组并获得 data1 的最小值。此外,我想保留 key2 的相应值而不对其进行分组。

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

让我:

key1 data1   
1    t   
2    test   

但我需要:

key1 key2 data1   
1    3    t   
2    1    test   

有什么想法吗?

请您参考如下方法:

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

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


要知道哪些元素返回 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