模式返回异常:必须产生汇总值

时间:2019-08-22 08:07:13

标签: pandas

为此数据框

   values  ii
0     3.0   4
1     0.0   1
2     3.0   8
3     2.0   5
4     2.0   1
5     3.0   5
6     2.0   4
7     1.0   8
8     0.0   5
9     1.0   1

此行返回“必须处理汇总值

bii2=df.groupby(['ii'])['values'].agg(pd.Series.mode)

此行有效

bii3=df.groupby('ii')['values'].agg(lambda x: pd.Series.mode(x)[0])

你能解释为什么吗?

1 个答案:

答案 0 :(得分:3)

问题是mode有时返回2个或更多值,请用GroupBy.apply检查解决方案:

bii2=df.groupby(['ii'])['values'].apply(pd.Series.mode)
print (bii2)
ii   
1   0    0.0
    1    1.0
    2    2.0
4   0    2.0
    1    3.0
5   0    0.0
    1    2.0
    2    3.0
8   0    1.0
    1    3.0
Name: values, dtype: float64

并且熊猫agg在输出中需要标量,因此返回错误。因此,如果选择第一个值,则效果很好

bii3=df.groupby('ii')['values'].agg(lambda x: pd.Series.mode(x).iat[0])
print (bii3)
ii
1    0.0
4    2.0
5    0.0
8    1.0
Name: values, dtype: float64