python 使用 pd.Series.mode 的 dataframe gropuby 在“by”列包含具有相同起始值的值时抛出错误

python dataframe gropuby using pd.Series.mode throws error when `by` column contains values with same starting value

我有一个数据框如下。

df2 = pd.DataFrame({
    "Name" : ['Thomas', 'Thomas', 'Thomas John'],
    "Credit" : [1200, 1300, 900],
    "Mood" : ['sad', 'happy', 'happy']
})

我正在尝试将其分组如下。

aggrFDColumnDetails = {
   'Mood':pd.Series.mode,
   'Credit':'sum'
}
df2.groupby(['Name']).agg(aggrFDColumnDetails)

但它抛出以下错误

Exception: Must produce aggregated value
.....
....
and a lot of stack traces..

如果我将第三个名称更改为 John 而不是 Thomas John,它将按预期工作。 谁能帮我解决一下?

分析 - 1 如果我按如下方式更改数据框,它就可以工作

df2 = pd.DataFrame({
    "Name" : ['Thomas John', 'Thomas John', 'Thomas'],
    "Credit" : [1200, 1300, 900],
    "Mood" : ['sad', 'happy', 'happy']
})

如果值以前几行值开头,则会抛出错误

我们可以使用:

aggrFDColumnDetails = {
   'Mood':lambda x: x.value_counts().idxmax(),
   'Credit':'sum'
}
df=df2.groupby(['Name']).agg(aggrFDColumnDetails)
print(df)

              Mood  Credit
Name                      
Thomas       happy    2500
Thomas John  happy     900

as Series.value_counts 降序排序我们也可以使用:

aggrFDColumnDetails = {
   'Mood':lambda x: x.value_counts().index[0],
   'Credit':'sum'
}