如何按列分组,检查另一列中出现次数最多的值并返回数据帧



我有一个数据帧,我想按给定的列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])应用于descriptionamount
  • 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

最新更新