我有一个数据帧,我想按给定的列cosine_group
分组,基于这个组,我想获得出现次数最多的Amount
(模式(。作为一个out,我想返回给定组中出现次数最多的金额及其描述
data=
description type amount cosine_group
485099454 atm wd 12140282 fcmb uyo abak atm 3 D 20000.00 1
0421209017073500 loan payment receipt D 1625.95 0
0421209017073500 loan payment receipt D 19931.87 0
816905417622 atm wd 10630481 uyo D 2000.00 2
456011516 atm wd 12140283 fcmb uyo abak atm 4 D 20000.00 1
0421209017073500 loan payment receipt D 23160.27 0
508235027 atm wd 12140282 fcmb uyo abak atm 3 D 15000.00 1
419988664 atm wd 12140283 fcmb uyo abak atm 4 D 20000.00 1
831107336668 atm wd 10630485 uyo D 10000.00 2
456012171 atm wd 12140283 fcmb uyo abak atm 4 D 20000.00 1
atm wd 10630485 uyo matter D 10000.00 2
我的预期输出是这样的:
description amount cosine_group
0421209017073500 loan payment receipt 19931.87 0
456011516 atm wd 12140283 fcmb uyo abak atm 4 20000.00 1
831107336668 atm wd 10630485 uyo 10000.00 2
我试过这行代码,但它总是导致错误
df.groupby(['cosine_group'])['amount'].mode()[['description', 'amount', 'cosine_group']]
使用scipy.stats.mode
cosine_group
上的GroupBy
,这将导致针对每个组的多个值,因此您可以应用聚合函数来针对每个组仅保留这些列中的值- 将聚合函数
agg(lambda x: scipy.stats.mode(x)[0][0])
应用于description
和amount
- CCD_ 10返回具有最频繁值的列表和包含其频率的列表的元组,例如CCD_。但我们只想要最频繁的值,所以我们可以通过切片
[0][0]
来获得它 reset_index()
从index
中删除余弦组
import scipy.stats
out = df.groupby("cosine_group")[['description', 'amount']].agg(lambda x: scipy.stats.mode(x)[0][0]).reset_index()
print(out)
cosine_group description amount
0 0 0421209017073500 loan payment receipt 1625.95
1 1 419988664 atm wd 12140283 fcmb uyo abak atm 4 20000.00
2 2 816905417622 atm wd 10630481 uyo 10000.00