我有以下数据框:
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