इस डेटाफ़्रेम के लिए

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

क्या आप समझा सकते हैं कि ऐसा क्यों है?

3
Marios Karaoulis 22 अगस्त 2019, 11:07

1 उत्तर

सबसे बढ़िया उत्तर

समस्या यह है कि 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
7
jezrael 22 अगस्त 2019, 08:09