python - Pandas:如何选择按键分组的一系列行的最小值

标签 python pandas data-cleaning

假设我有以下数据框:

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/

相关文章:

python - 按组重新采样 pandas 系列

python - Pandas 将一列的列表元素的值分配到 n 个不同的列中

r - 在数据帧上使用 gsub()

python - 过滤数据框匹配列值与python中的列表值

Python:使用 Datareader 截断列宽

python - 如何将单词 "ActionAction-AdventureShooterStealth"拆分为单独的单词列表?

python - 在 python numpy 数组中指定每个对象的数据类型

python - 如何在 Ubuntu 20.04 上全局安装 pip,让所有用户都可以使用相同的方式?

python - 机器学习: combining features into single feature

python - 我如何检查 Logo 是否在 BMP 文件中?