有没有办法使用Pandas pd.Series.mode方法并在平局时接受任何获胜的价值(避免使用lambda functions)?

2024-04-19 22:51:51 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个小例子:

import pandas as pd

category_list_1 = ['Album','Album','Album','Album','Album','Footballer','Footballer','Footballer']
value_list_1 = ['Alligator','Alligator','Cherry Tree','Cherry Tree','Cherry Tree','Nolberto Solano','Nolberto Solano', 'Laurent Robert']

df_1 = pd.DataFrame({'Category':category_list_1,'Value':value_list_1})


category_list_2 = ['Album','Album','Album','Album','Footballer','Footballer','Footballer']
value_list_2 = ['Alligator','Alligator','Cherry Tree','Cherry Tree','Nolberto Solano','Nolberto Solano', 'Laurent Robert']

df_2 = pd.DataFrame({'Category':category_list_2,'Value':value_list_2})


df_1_agg = df_1.groupby(['Category'])['Value'].agg(pd.Series.mode)
print(df_1_agg)
df_2_agg = df_2.groupby(['Category'])['Value'].agg(pd.Series.mode)
print(df_2_agg)

df_1_agg工作正常,因为每个类别都有一个真正的模态值。但是对于df_2_agg,我希望它返回模态相册的任意一个值。但是,我得到的却是错误:

Exception: Must produce aggregated value

我可以使用lambda函数作为解决方法,例如:

df_2_agg = df_2.groupby(['Category']).agg(lambda x:x.value_counts().index[0])
print(df_2_agg)

然而,我认为对于较大的数据集来说,这可能要慢得多。有没有办法在熊猫内部产生这种类型的输出


Tags: treedfalbumvalueagglistpdcherry