当`by`列包含具有相同起始值的值时,使用pd.Series.mode的python数据帧gropuby引发错误

时间:2019-11-15 11:29:14

标签: pandas dataframe python-3.6 pandas-groupby mode

我有一个如下数据框。

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']
})

如果该值以先前的行值开头,则抛出错误

1 个答案:

答案 0 :(得分:2)

我们可以使用:

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

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

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