假设我有以下数据框:
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”列的min,同时保留行中最小值的其余值。
我认为这可以通过groupby()来完成,但我不会想象如何。
编辑:我删除了逗号,我的数据是数字
答案 0 :(得分:1)
要获取每个键中的最小值,可以使用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
创建一个布尔系列,其中min值为true,其他值为false;然后你可以使用布尔系列进行子集化:
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
排序的最小行:
import math
def permute(a, l, r, p):
if l == r:
p.append(a)
print(a)
else:
for i in range(l, r + 1):
a[l], a[i] = a[i], a[l]
permute(a, l + 1, r, p)
a[l], a[i] = a[i], a[l] # Backtrack
return p
n = 1347
size = math.floor(math.log(n, 10))
a = list(map(int, str(n)))
permutations = permute(a, 0, size, [])
print("------")
print(permutations)