我有一个数据集,它有一个ID列、10个不同的常规服务列和1个高级服务列。 一个人可以多次进来,所以身份证可以重复。 在一个人的访问期间,他们还可以购买多达10项常规服务,再加上一项高级服务
我希望能够确定每个人购买最多的常规服务,以及他们购买最多的高级服务。如果任何服务的模式是相同的定期或保费,任何都可以
使用pandas,我的数据框如下所示:
ID Service1 Service2 Service3 .... Service10 Premium
----------------------------------------------------------------
1 A B C Z XX
1 B C D Y XY
1 A B C O XX
2 R S T B XX
我尝试了df.mode()和pd.Series.mode(),但不断出现错误。我正在尝试生成一个唯一客户机列表(按ID)和所有列的模式
我还需要一个单一的列模式以及
这适用于常规服务(需要找到超过10列的模式):
def servicemode(group):
svcs_cols = [group['Service1'],
group['Service2'],
group['Service3'],
group['Service4'],
group['Service5'],
group['Service6'],
group['Service7'],
group['Service8'],
group['Service9'],
group['Service10']]
return pd.concat(dx_cols).dropna(inplace=False).agg(lambda x: pd.Series.mode(x)[0])
df.groupby('ID').apply(servicemode)
这是针对高级服务的(需要在单个列中找到模式):
df.groupby('ID')['Premium'].agg(lambda x: pd.Series.mode(x)[0])
这是期望的结果:
ID RegSvcMode PremiumSvcMode
1 B XX
2 R XX
如果可能的话,我更喜欢使用纯熊猫——任何建议都将不胜感激。谢谢你
我不确定您的原始代码有什么问题,但这里有一个解决方案:
相关问题 更多 >
编程相关推荐