Pandas:如何select按键分组的一系列行的最小值

Pandas: How to select the minimum value of a series of rows grouped by a key

假设我有以下数据框:

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

也就是说,取 "Amount" 列的最小值,同时保留具有最小值的行中的其余值。

我认为这可以通过 groupby() 来完成,但我不知道如何实现。

编辑:我删除了逗号,我的数据是数字

要获取每个键内的最小值,您可以使用groupby.apply创建一个布尔系列,其中最小值取真,其他值取假;然后你可以使用布尔系列进行子集化:

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