假设我有以下数据框:
Key | Amount | Term | Other | Other_2
----+--------+--------+-------+--------
A | 9999 | Short | ABC | 100
A | 261 | Short | ABC | 100
B | 281 | Long | CDE | 200
C | 140 | Long | EFG | 300
C | 9999 | Long | EFG | 300
所需的输出应该是:
Key | Amount | Term | Other | Other_2
----+--------+--------+-------+--------
A | 261 | Short | ABC | 100
B | 281 | Long | CDE | 200
C | 140 | Long | EFG | 300
也就是说,取“金额”列的最小值,同时保留具有最小值的行中的其余值。
我认为这可以通过 groupby() 来完成,但我不知道如何实现。
编辑:我删除了逗号,我的数据是数字
最佳答案
要获取每个键中的最小值,您可以使用groupby.apply
创建一个 bool 系列,其中最小值取true,其他值取false;然后您可以使用 bool 系列进行子集化:
df[df.Amount.groupby(df.Key).apply(lambda x: x == x.min())]
# Key Amount Term Other Other_2
#1 A 261 Short ABC 100
#2 B 281 Long CDE 200
#3 C 140 Long EFG 300
您可以在每个子组上使用nsmallest()
方法的另一个选项,在这里您可以获取按Amount
排序的最小行:
df.groupby("Key", group_keys=False).apply(lambda g: g.nsmallest(1, "Amount"))
# Key Amount Term Other Other_2
#1 A 261 Short ABC 100
#2 B 281 Long CDE 200
#3 C 140 Long EFG 300
关于python - Pandas:如何选择按键分组的一系列行的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41971322/