首页 > 解决方案 > Python中多个帐户的多种模式

问题描述

我有几个帐户的数据框,显示不同的动物类别模式。如何识别具有 1 种以上模式的帐户?

例如,注意账户 3 只有一种模式(即“狗”),但账户 1、2 和 4 有多种模式(即不止一种模式)。

test = pd.DataFrame({'account':[1,1,1,2,2,2,2,3,3,3,3,4,4,4,4],
             'category':['cat','dog','rabbit','cat','cat','dog','dog','dog','dog','dog','rabbit','rabbit','cat','cat','rabbit']})

我正在寻找的预期输出将是这样的:

pd.DataFrame({'account':[1,2,4],'modes':[3,2,2]})

其次,我尝试为所有具有多种模式的帐户采用任何随机最高模式。我想出了以下代码,但是,这仅返回每个帐户的第一个(字母)模式。我的直觉告诉我可以在iloc下面的括号内写一些东西,也许是一个介于 0 和模式总数之间的随机数组,但我无法完全到达那里。

test.groupby('account')['category'].agg(lambda x: x.mode(dropna=False).iloc[0])

有什么建议么?非常感谢。

标签: pythonpandasmode

解决方案


您可以为此使用 numpy.random.choice

test.groupby('account')['category'].agg(
    lambda x: np.random.choice(x.mode(dropna=False)))

推荐阅读