我有以下数据框:
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
有什么想法吗?
答案 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())])
要知道哪些元素返回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