pandas groupby不算数。为什么?

时间:2018-03-22 10:20:12

标签: python pandas count unique pandas-groupby

当我执行以下操作时

print(dataframe.groupby(['Latitude','Longitude','Year','Day'])['Yield'].unique())

我得到了奇怪的结果(只显示了一部分)

Latitude Longitude Year Day
39.338764 -85.241940 2009 141 [69.9123985]
* 2010 145 [60.184353, 59.7501973333, 52.523612]
* 2011 157 [62.324484, 44.512905]
* 2012 139 [57.240542625]
* 2013 141 [73.2846975, 67.992009]
* 2012 139 [55.4780421429]

对于Year = 2010和Day = 145,我得到三个值 而对于Year = 2012和Day = 139,我得到两个分开的值,当我应用函数mean()时,这两个值无法平均。

为什么呢?

P.S。它是0.20.1 pandas版本,我在dataframe中没有任何其他变量

1 个答案:

答案 0 :(得分:4)

我认为lambdaunique需要numpy.mean功能,因为unique会返回numpy数组:

print(dataframe.groupby(['Latitude','Longitude','Year','Day'])['Yield'].apply(lambda x: np.mean(x.unique())))

<强>示例

df = pd.DataFrame({'Latitude':list('aaabab'),
                   'Yield':[1,1,4,5,5,4],
                   'Longitude':list('aaabbb')})

print (df)
  Latitude Longitude  Yield
0        a         a      1
1        a         a      1
2        a         a      4
3        b         b      5
4        a         b      5
5        b         b      4

print(df.groupby(['Latitude','Longitude'])['Yield'].unique())
Latitude  Longitude
a         a            [1, 4]
          b               [5]
b         b            [5, 4]
Name: Yield, dtype: object

print(df.groupby(['Latitude','Longitude'])['Yield'].apply(lambda x: np.mean(x.unique())))
Latitude  Longitude
a         a            2.5
          b            5.0
b         b            4.5
Name: Yield, dtype: float64

替代解决方案:

print (df.drop_duplicates(['Latitude','Longitude', 'Yield']).groupby(['Latitude','Longitude'])['Yield'].mean())
Latitude  Longitude
a         a            2.5
          b            5.0
b         b            4.5
Name: Yield, dtype: float64